Skip to main content

Full text of "Peeker 1 1986Peeker "Magazin für Microcomputer", Issue 1-1986"

See other formats


Nr. 1/86 Januar 


DM 6.50, sfr 6.50, 6S 50, Lit 5900, hfl 7.50 









Quicksort A 
Vokabeltrainer _ um‘ 














NT 


ProDOS-Konverter a y u r 





NN 





ARTE 
Im 

















tm 4422 


SYSTEMAUFBAU DATENBANK TEXTBEARBEITUNG -ACCESS II - DATENFERN- 
SCHREIBTISCHMANAGER -RECHENBLATT ÜBERTRAGUNG - SYSTEMINFORMATIONEN 


V.BOTTA / CHR.LANGE / K. ZIMMERMANN V.BOTTA / CHR.LANGE / K. ZIMMERMANN 





e-1Li e-1ni 


Band 1: and 2: 
Einleitung . Einleitung 
Was Sie benötigen 2. Was Sie benötigen 
Starten von APPLE WORKS 3. Starten von APPLE WORKS 
Der Schreibtischmanager 4. Der Schreibtischmanager 
. Datenbank 5.  Textbearbeitung 
6. Rechenblatt .  Datenfernübertragung 
Al Anschluß der Festplatte ProFile ... Ab wie Band 1. dazu: 
A2 APPLE II Easy Pieces Referenz A7 Modemkabel für APPLE Ile. IIc 
A3 Druckeranpassungen A8 SuperSerialCard: Einstellung 
A4 DOS 3.3 Konvertierungen A9 ASCII-Textdateien aus anderen 
A5 APPLE WORKS Disketten sichern 
kopieren A10 DATEX-P20O F Verzeichnis 
A6 Hilfsfunktionen nach Programmteilen All Deutsche/Englische Menübilder 
von ACCESS II 


Von Botta/Lange/Zimmermann je 264 Seiten, 
Softcover, je DM 49,- 


APPLE WORKS auf APPLE II, Ile, Ilc: 


verwandelt APPLE-II-Computer in einen Elektroni- 

schen Schreibtischmanager mit: 

Texterstellung ...Edition, Briefarchiv, Ausdruck etc. 
Datenarchivierung ... Kontoführung, Buchhaltung 
etc. Formblattkalkulation ...Bilanzen, VisiCalc- 
Dateien etc. Datenfernübertragung ...Mailbox, 
Rechnerkopplung etc. 

@ ist ein erfolgreicheres Integrationspaket als LOTUS 
auf IBM PC! 

® ist auf 1 MByte Speichererweiterungen Ihres 
APPLE II vorbereitet! 

® erschließt Ihnen die Zukunftstechnik MAILBOX! 

® ist ebenso einfach zu bedienen wie APPLE 
WRITER: 

Kein Befehlsstudium ...Einfachste Menü- 
führung ... Sofortige Anwendbarkeit 


te-wi’s APPLE WORKS SYSTEMBÜCHER 1+2 

zeigen Ihnen: 

@ Sämtliche APPLE WORKS Funktionen an Beispie- 
len aus der Wirtschaft 

® Das Wechseln zwischen Text/Rechenblatt/Daten- 
archiv/Dfü 

® Umfassende Systeminformationen zu Dateikonver- 
tierung, Druckeranpassung etc. 


te-wi Verlag GmbH 


“ 
Theo-Prosel-Weg 1 eat 
8000 München 40 


Weitere te-wi-Bücher 


Das Net, 

APPLE II/il+/IIe/lIIc-Handbuch 

(L. Poole) 

Erst mit Hilfe dieses Leitfadens werden Sie 

Ihren Apple Il erfolgreich einsetzen. denn 

Text und Bildmaterial gehen weit über das 

hinaus. was herstellerseitig an Literatur 

angeboten wird. 

Neu überarbeitet und jetzt um die spezifi- 
Deere Schen Eigenheiten der Modellelle undlI c 

nu erweitert. 472 Seiten. Softcover. DM 66.- 


LOGO - 
Jeder kann programmieren 

» (Daniel Watt) 
Buch des Jahres in den U SA. Für die 
Computer APPLE II, C-64, IBM PC, 

E ATARI bis 520 ST., TI-99 und Schneider 
LPES: 
Hochwertiges Textbuch für Logo-Kurse 
zu Hause und im Lehrbereich. 


384 Seiten. A4, DM 59, 





APPLE 


MASCHINEN 
SPRACHE 
APPLE Il - Bewegte 3D-Graphik Don mmanxurrnman | Apple Maschinensprache 


(Phil Cohen) 

Selbstentworfene Graphiken und Dia 
gramme — animiert oder als Standbilder 
eben oder räumlich: alle erforderlichen 
BASIC-Programme mit Erklärung finden 
Sie in diesem Buch. 

200 Seiten. Softcover. DM 49, 


NEr, 
Reparaturanleitung Computer: 
Apple Il, Iplus 

Einzigartige Serviceunterlage für Reparatu- 
ren und Entwicklungsarbeiten am Apple Il. 
Enthält Schaltpläne. Bauteile- und Ver- 
gleichstypenliste: Prüfpunkte mit Oszillo- 
grammen der Signalformen., Logiktabellen. 
Spannungsangaben: schnelle Servicetests: 
Anleitung zur systematischen Fehlersuche. 


Für BASIC-Programmierer der einfachste 
„-.| Zugang zur Muttersprache des APPLE. Wesent:- 
| lich schnellere Maschinenprogramme, direkte 
Manipulation des Mikroprozessors 6502 im 
"Te APPLE - als Brücke dorthin benötigt dieses 
am Buch nur die drei BASIC-Befehle POKE. 
sn CALL. PEEK.D. Inman/K. Inman. DM 49.- 


Erstes deutsches Referenzwerk sämt 
licher Befehle und Systemroutinen von 
Apple II. IIplus. Ile 

APPLE II PASCAL 47 





Betriebssystem €, U 


Betriebssystem. 272 S.. DM 49.- 
Sprache. 216 S.. DM 39.- 
Pascal 1.2 Addendum. 112 S.. DM 36.- 


Grundlagenbuch. Bestseller 


APPLE PASCHL, 





In A4-Mappe. DM 29,50 


Eine praktische Anleitung. 
544 S.. DM 59.- 


Noch im Programm: Macintosh Programmierhandbuch mit MSBASIC 2.0 
Computer für Kinder, APPLE Il, DM 29,80 (Ende ’85), DM 59,- 

6502 Programmieren in Assembler, DM 59,- Einführung in die Mikrocomputer-Technik, DM 66,- 
Umweltdynamik (Prospekt anfordern), DM 66,- (NEU) M68000-Familie, 2 Bände, DM 79,- und DM 69,- 





©O JAHRE 
FACHLITERATUR 


Über 40 erfolgreiche Fachzeitschriften und ein 
großes Fachbuchprogramm für Wirtschaft, Wis- 
senschaft und Technik erscheinen bei der Ver- 
lagsgruppe Dr. Alfred Hüthig. Sie sind unerläßlich 
zur aktuellen Information und beruflichen Weiter- 
bildung der Fachleute in den Bereichen: 
Aerosole - Chemie - Makromolekulare Chemie - 
Chromatographie - Computeranwendung im La- 
bor - Metall - Gummi - Kautschuk - Kunststoffe - 
Kosmetika - Parfümerie - Elektronik - Elektrotech- 
nik - CAD, CAM - Elektrohandwerk - Elektrohan- 
del - Energietechnik - Beleuchtungstechnik - Hob- 
byelektronik - EDV - Mikrocomputer - Fernsehen 
- Kinotechnik - Nachrichtenelektronik - Radio- und 
Fernsehtechnik - Unterhaltungselektronik - Krimi- 
nalistik - Sicherungstechnik - Recht - Verwaltung 
- Bundesbahn - Kunsthandel - Schuhtechnik - 
Verpackung und Zahnmedizin. 


Hucthi 


1925 - 1985 








‚ : = 
Probehefte und Fachbuchpröspekte erhäiten Sie beit 
Dr. Alfred Hüthig Verlag, Postf. 102869, 6900 Heidelberg 





Die Peeker-Redaktion befindet sich übrigens in der zweiten Etage ganz links 


Impressum 


Peeker 

3. Jahrgang 1986 

ISSN 0176-9200 

© für den gesamten Inhalt 
einschließlich der Programme 
Dr. Alfred Hüthig Verlag, 
Heidelberg 1986 


Verleger und Herausgeber: 
Dipl.-Kfm. Holger Hüthig 
Geschäftsführung Zeitschriften: 
Heinz Melcher 

Chefredakteur: Ulrich Stiehl (us) 
Redaktion: Harald Grumser 


Sekretariat, Tel. (06221) 4892 31 
Bestellungen, Tel. (06221) 4892 78 








Anzeigenleitung: 

Jürgen Maurer, Tel. (06221) 489218 
z. Zt. gilt Anzeigenpreisliste Nr. 4 
Vertriebsleitung: 

Walter Menzel, Tel. (06221) 489280 
Produktionsleitung: Gunter Sokollek 
Gestaltung: Rainer Schmitt 
Illustrationen: Hannes Pohle 





DEEKE 





it 


Heft 1/1986 





Grundlagen 


Wie funktioniert Quicksort? 
Mit einem Demonstrationsprogramm 
von Ulrich Stiehl 


Utility 


Quicksort 
Eine superschnelle Applesoft-Erweiterung 
von Harald Grumser 


Schule 


Vokabeltrainer 
Vokabeln lernen mit dem Apple Il 
von Thomas Zink 


Grafik 


Applesoft-HGR-Erweiterung 
in Assembler 
von Klaus Schäfer 


ProDOS 


: PROTODOS 

Konvertierung von ProDOS- 
in DOS-3.3-Dateien 

von Arne Schäpers 


UCSD 


Designer 
Zeichensatz-Generator 
in Apple-Pascal 

von Gabor Herr 


Turbo 


READPAS 

Konvertierung von UCSD- 
in Turbo-Pascal-Textfiles 
von Michael Erperstorfer 


Verlag: Erscheinungsweise: 12 Hefte jährlich, 
Erscheinungstag jeweils 1 Woche vor Monatsbeginn. 
Jahresabonnement DM 72,-, einschließlich MwSt, 
im Inland portofrei. Einzelheft DM 6,50 


Dr. Alfred Hüthig Verlag GmbH 
Im Weiher 10, Postfach 102869 
6900 Heidelberg 

Telefon (06221) 489-1 

Telex 4-6 1727 hued d. 

Telefax (06221) 489279 

BTX * 51851 # 


Vertrieb Handel: 


Breslauer Str. 5, Postfach 1123, 
8057 Eching b. München, 
Tel. 089/319 1067, Telex 0522 656 


16 


20 


°10 


36 


43 


48 


MZV - Moderner Zeitschriften Vertrieb GmbH 


Kyan 


Kyan-Pascal 


Ein vollcompilierendes 


6502-Pascal 
Erfahrungsbericht 
von Herbert Pohl 


Praxis 


50 


Der Apple Il als Werkzeug 


für den Betriebswirt 


Teil 1: Das Simplex-Verfahren 


in der Controller-Praxis 


von Dipl.-Betriebswirt Willy Holtkamp 96 


Hobby 


Grafik-Demonstrationen 


Teil 2 
von Ralf Knoke 


Testberichte 


61 


Video-Clips für jedermann 


Die Video-1000-Karte 


Erfahrungsbericht 


von Norbert Man Brandl 63 


The Write Choice 


Ein preiswertes Textverarbeitungsprogramm 


Erfahrungsbericht 


von Franz-Josef Hüskens 66 


Hard- und Software zum Apple IlIc 
zusammengestellt von Matthias Pohl 67 


Ampersoft 


Eine Ampersand-Utility-Sammlung 


Kurzbericht 


von Franz-Josef Hüskens 68 


Buchbesprechungen 


69 


Inserentenverzeichnis 70 


Zahlungen: an den Dr. Alfred Hüthig Verlag 


GmbH, D-6900 Heidelberg 1: Postgiro- 
konten: BRD: Karlsruhe 485 45-753; 


Österreich: Wien 7555888; Schweiz: Basel 


40-24417; Niederlande: Den Haag 145728; 


Italien: Mailand 47718; Belgien: 

Brüssel 723026; Dänemark: Kopenhagen 
34969; Norwegen: Oslo 994 24; 
Schweden: Stockholm 5477 76-5 


Bankkonten: Landeszentralbank Heidel- 
berg 67 207 341; BLZ 67200000; Deutsche 
Bank Heidelberg 02165041; BLZ 
67270003; Bezirkssparkasse Heidelberg 
20451, BLZ 67250020. 


Herstellung: Heidelberger Verlagsanstalt 
Printed in Germany 





von Ulrich Stiehl 


Mit einem Demonstrationsprogramm 


Anfang der sechziger Jahre entwickelte 
ein englischer Informatiker namens C.A.R. 
Hoare ein neuartiges Sortierverfahren, das 
1962 in einer Computerfachzeitschrift un- 
ter der Bezeichnung „Quicksort“ vorge- 
stellt wurde. Es sollte sich als der bislang 
beste Sortieralgorithmus erweisen. Wie al- 
le genialen Algorithmen scheint auch 
Quicksort dem Lernenden zunächst un- 
überwindlich kompliziert zu sein. Hat man 
den Algorithmus jedoch erst einmal ver- 
standen, dann enthüllt er sich als verblüf- 
fend einfach. 








1. Sortieren und Vergleichen 


Der Begriff des Sortierens ist nicht so ein- 
fach, wie man gemeinhin denkt. 


Alphabetische Sortierung 


Betrachten wir zunächst das Alphabet. 
Liegen beispielsweise die Buchstaben des 
Abc sortiert vor? „A“ ist ein Vokal, „B“ ein 
Labial, „C“ ein kombinierter Konsonant 
(„I + „Z*), „D“ ein Dental, „E“ wieder 
ein Vokal usw. Von einer Sortierung kann 
keine Rede sein! Wer zufällig einmal ein 
Wörterbuch der altindischen Sprache 
Sanskrit in die Hand bekommen sollte, 
wird zu seinem Erstaunen feststellen, daß 
die alten Inder das richtig sortierte Alpha- 
bet erfunden haben. Zunächst kommen 
die Vokale und dann die Konsonanten, die 
jeweils in sich exakt teilsortiert sind. Die 
Dentale sind beispielsweise in der Reihen- 
folge „T, TH, D, DH, N“ angeordnet. „T“ 
ist der stimmlose Dental, „TH“ der stimm- 
los aspirierte Dental, „D“ der stimmhafte 
Dental, „DH“ der stimmhaft aspirierte 
Dental, und schließlich ist „N“, wofür es 
ein spezielles Zeichen gibt, dasjenige 
Dental-N, das einem anderen Dental vor- 
ausgeht. Das „N“ in „Ente“ spricht man 
nämlich anders als das „N“ in „Anker“ 
aus, denn bei „Ente“ steht ein Dental-N 
vor dem Dental-T und bei „Anker“ ein 
Guttural-N vor dem Guttural-K. Eines kön- 
nen wir auf jeden Fall festhalten: Wer auch 
immer das lateinische Alphabet erfunden 
hat, muß eine Vorliebe für „chaotisches 
Sortieren“ gehabt haben. 


Numerische Sortierung 


Auch die Sortierung von Zahlen ist nicht 
so eindeutig, wie man zunächst annehmen 
möchte. Die Folge 

Me 

wird man gemeinhin als aufsteigend sor- 
tiert bezeichnen. Wie steht es hingegen 
mit der Folge 

739, 1341, 522, 1862, 

die in einem Intelligenztest-Buch von 
H.J.Eysenck steht? Ist sie nach einem 
„geheimen Verfahren“ sortiert? Tatsäch- 
lich gibt es in der höheren Mathematik 
„sortierte“ Reihen, die man landläufig we- 
der als aufsteigend noch absteigend be- 
zeichnen würde. 


Sonstige Sortierung 


Noch undurchsichtiger wird der Begriff 
des Sortierens, wenn weder Wörter noch 
Zahlen sortiert werden sollen. Wie kann 
man beispielsweise die Shapes eines Gra- 
fikspiels sortieren: nach der Anzahl der 
Bits, nach der Richtung der Vektoren, nach 
der Wirkung auf den Spieler? Hier wie 


Peeker 1/86 





auch bei den Wörtern und Zahlen müssen 
jeweils spezielle „Größer-Kleiner- 
Gleich“-Vergleichskriterien festgelegt 
werden. Für die alphabetische Sortierung 
„nach Duden“ gilt u.a. (Beispiele): 

„A“ < „B“ 


„a = ,„A" 
„a =,„A" 
„B’ = ,S5" 
„” = nichts 
„AA“ < „AB“ 
USW. 


Dem Sortieren liegt also ein Vergleichs- 
prozeß zugrunde, der von den Vergleichs- 
Kriterien bestimmt wird. Ob eine Sortie- 
rung richtig oder falsch ist, hängt damit 
allein von den Vergleichskriterien ab, die 
ihrerseits völlig willkürlich festgelegt sein 
können, wie das lateinische Alphabet 
zeigt. 


2. Sortieren und Tauschen 


Unter Sortieren verstehen wir die Neuan- 
ordnung einer bestimmten Anzahl von 
Elementen nach zuvor festgelegten Ver- 
gleichskriterien. Programmtechnisch wer- 
den praktisch immer Arrays (= dimensio- 
nierte oder Feldvariablen) sortiert, und 
zwar bei Mikrocomputern üblicherweise 
im internen Speicher (= internes Sortie- 
ren im RAM) und nur ausnahmsweise im 
externen Speicher (= externes Sortieren 
direkt auf dem Datenträger = Diskette 
usw.). Betrachten wir hierzu das folgende 
Applesoft-Programm-Fragment: 


10W (1) = 25 
20 W (2) = 30 
30 W (8) = 10 


Hier umfaßt der Array W nur 3 Elemente, 
nämlich 

1. Element mit Wert 25, 

2. Element mit Wert 30, 

3. Element mit Wert 10. 

Dabei ist zu unterscheiden zwischen der 
Nummer eines Elements (1., 2., 3.) und 
dem Wert eines Elements (25, 30, 10). Die 
Nummer eines Elements heißt auch Index 
und ist mathematisch gesehen eine Ordi- 
nalzahl = Ordnungszahl (Gegensatz: Kar- 
dinalzahl = Grundzahl). 

Würden die 3 Werte 25, 30 und 10 als 3 
entsprechend bezifferte Karteikärtchen 
vorliegen, so könnte man diese auf dem 
Tisch mit einem „flotten Griff“ so verdre- 
hen, daß sich sofort die aufsteigend sor- 
tierte Folge 10, 25, 30 ergeben würde. 

Bei einem Sortierprogramm muß statt des 
„flotten Griffs“ stets ein paarweiser 
Tausch vorgenommen werden, wobei in 
Applesoft in Ermangelung eines SWAP- 
oder direkten Tauschbefehls sogar ein in- 
direkter Tausch über eine Zwischen- oder 
Dreieck-Tauschvariable T erfolgen muß. 
Wie ersichtlich, sind bei unserem Array 2 
Tauschoperationen erforderlich, um die 


GRUNdlAgEeN 4.4 


gewünschte aufsteigende Sortierung her- 
beizuführen: 


Vorher: 

W(i)=235 
W (2) = 30 
W (3) = 10 


Erster Tausch von 
1. und 3. Element: 


T=W() 
W()=W (3) 
W(68)=T 
Danach: 
W(1)=10 
W (2) = 30 
W(3) =25 


Zweiter Tausch von 
2. und 3. Element: 


T=W (2) 

W (2) =W (3) 
W(63)=T 
Danach 
W(1)=10 
W (2) = 25 
W (3) = 30 


Wert- und Indextausch 


Da die Werte hier physisch vertauscht 
wurden, sprechen wir auch vom Wert- 
tausch. Das Gegenstück dazu ist der In- 
dextausch. Da indes der Index oder die 
Feldnummer nur als „Offset“, d.h. als rela- 
tiver oder errechneter Abstand zum Be- 
ginn eines Arrays, und mithin gar nicht 
physisch existiert, muß zu diesem Zweck 
neben dem Wert-Array W ein Index-Array | 
eingeführt werden, der zunächst wie folgt 
initialisiert wird: 

I(1)=1 

I(2)=2 

I(3) =3 

Dies besagt, daß der Index-Array | anfangs 
als Werte die Nummern des Wert-Arrays 
W übernimmt. Nach Beendigung der Sor- 
tierung gilt für den Index-Array: 

I(1)=3 

I(2)=1 

I(3)=2 

Beispielsweise enthält das 1. Element des 
Index-Arrays I den Wert 3 und zeigt damit 
auf das 3. Element des Wert-Arrays W, das 
den Wert 10 enthält, so daß gilt: 

W(I(1)) =W (3) = 10 

Wenn man anstelle des Wert-Arrays den 
entsprechenden Index-Array sortiert, so 
bleibt die ursprüngliche Reihenfolge der 
Elemente des Wert-Arrays erhalten. Neh- 
men wir an, Sie hätten eine Kundendatei 
(Wert-Array), wobei jedem Kunden eine 
logische Suchnummer vergeben wurde, 
die der Nummer (= dem Index) des jewei- 
ligen Datensatzes (= Wert-Elements) ent- 
spricht. Durch physische Vertauschung 
der Wert-Elemente würden die logischen 
Suchnummern verlorengehen. Deshalb 


7 


1071 





Tabellarisches Quicksort-Protokoll 


ı 35 43 98 66 54 31 94 83 32 72 56 
: 01 02 03 04 05 06 07 08 09 10 11 
: 72 43 98 66 
: 72 43 29 
: 12 43 29 
: 72 43 29 
: 72 43 29 
: 45 43 29 
: 01 02 03 
: 01 02 03 
: 45 
: 45 
: 01 
: 97 
: 45 
: 45 
: 01 
: 93 
: 45 
45 
: 01 
: 01 
, 45 
: 45 
: 01 
: 18 43 29 66 
: 18 
91 
: 18 
: 18 
:-18 
: 18 
: 01 
: 01 
: 18 
: 18 
: 01 
0 
: 18 
: 18 
: 01 
: 18 
: 18 
18 
: 01 
: 18 
: 18 
: 01 
: 18 


54 31 94 83 


66 94 83 


43 29 
43 29 
02 03 
02 03 
43 29 
43 29 
02 03 
02 03 
43 29 
43 29 
02 03 
02 03 
43 29 
43 29 54 
02 03 04 05 06 
54 31 
43 29 66 54 31 
02 03 04 05 06 
45 29 66 
45 29 27 
45 29 27 
32 29 27 
02 03 04 
02 03 04 
32 29 27 
32 29 27 
02 03 04 
02 03 04 
32 29 27 
32 29 27 35 31 
02 03 04 05 06 
35 29 27 32 31 

35 29 27 32 31 
34 29 27 32 31 
02 03 04 05 06 


27 29 34 32 31 

27 29 34 32 31 

02 03 04 05 06 

27 34 29 32 31 
: 18 27 31 29 32 34 35 43 54 56 
02 03 04 05 06 07 08 U 17 
18 27 29 31 32 34 35 43 54 56 
: 18 27 29 31 32 34 35 43 54 56 
01 02 03 04_05 06 07 08 10 11 
18 27 29 31 32 34 35 43 54 56 
18 27 29 31 32 34 35 43 54 56 
18 27 29 31 32 34 35 43145154 56 


27 
12 





71 81 45 34 
14 15 16 
81] 45 
45 
45 
45 
81 
81 
15 
15 
86 
81 
19 
15 
81 


90 29 unsortiert 

19 20 Mitte 10,V:72 
90 29 Ersttausch 

90 98 Tausch 

90 98 Tausch 

90 98 Tausch 

90 98 Tausch 

90 98 Letzttausch 

19 20 Stack,F:15,L:20 
19 20 Mitte 17,V:86 
90 98 Ersttausch 

90 98 Letzttausch 

19 20 Stack,F:15,1L:16 
19 20 Mitte 15,V:81 
90 98 Ersttausch 

90 98 Letzttausch 

19 20 Stack,F:18,1:20 
18 19 20 Mitte 19,V:90 
90 94 98 Ersttausch 

90 94 98 Letzttausch 

19 20 Stack,F:19,L:20 
19 20 Mitte 19,V:94 
94 98 Ersttausch 

94 98 Letzttausch 

19 20 Mitte 7,V:18 
98 Ersttausch 

98 Letzttausch 

20 Mitte 7,V:45 
98 Ersttausch 

98 Tausch 

98 Tausch 

98 Letzttausch 

20 Stack,F:10,L:13 
20 Mitte 11,V:56 
94 98 Ersttausch 

94 98 Letzttausch 

18 19 20 Stack,F:12,L:13 
18 19 20 Mitte 12,V:66 
6 90 94 98 Ersttausch 

94 98 Letzttausch 

20 Mitte 5,V:35 
98 Ersttausch 

98 Tausch 
Letzttausch 
Mitte 4,V:27 
Ersttausch 
Letzttausch 
Mitte 4,V:34 
Ersttausch 
Letzttausch 
Mitte 4,V:29 
Ersttausch 
Letzttausch 
Mitte 4,V:31 
Ersttausch 
Letzttausch 

98 sortiert 


Peeker 1/86 








MEN 3 —;, »peeker« bietet Ihnen was! 
| | 


Wer jetzt schenkt hat mehr von seinem Apple. 
Dafür schenkt »peeker« Ihnen etwas: Den prakti- 
MAGAZIN FÜR APPLE-COMPUTER song e” die Speicherkapazität Ihrer 


Trickfilmgrafik | 









> aka | Sie wissen ja, wie gut der »peeker« Ihnen im täg- 
| Print-Using | lichen Umgang mit Ihrem Apple behilflich ist. Und 


| Sie brauchen Ihren »peeker« nicht mehr zu teilen 
oder auszuleihen. 


Der blaue Disketten-Locher ist unser Geschenk an 
Sie für einen neuen »peeker«-Abonnenten. Denn 
wer einen Apple hat, der soll auch seinen »peeker« 
haben. RER 


Pascal-Compiler 
Premium-Softcard 











si nam 
Peeker 1/86 


ch bin der neue Abonnent. Bitte liefern Sie mir bis Coupon ausschneiden und 


auf Widerruf, zumindest aber für 1 Jahr, »peeker« 


zum Jahresbezugspreis von DM 72,- (Ausland plus einsenden an: 
DM 18,- Porto) an folgende Anschrift: 


Name, Vomme 7 »peeker« 
Abonnementservice 


Bestellcoupon 
D Er ERBE IN 


6900 Heidelberg 1 


Datum, Unterschrift 


Gewünschte Zahlungsweise 
[] gegen Rechnung 
[] bargeldlos durch Bankeinzug 


Ich habe den neuen Abonnenten geworben und er- 


halte kostenlos den Disk-Locher. Kantor Banazen) 
Geldinstitut Bw 
Komme een Vertrauensgaräntie: 
Diese Bestellung kann ich innerhalb einer Woche 
bei Dr. Alfred Hüthig Verlag GmbH, Im Weiher 10, .. . 
Straße, Postfach 6900 Heidelberg 1 widerrufen. Zur Wahrung der Hüch 
| Frist genügt die rechtzeitige Absendung. Ich be- PUBLIKATION 
PLZ, Ort stätige die Kenntnisnahme mit meiner Unterschrift: 


Datum, Unterschrift 2. Unterschrift 





wären hier die Indizes (= Zeiger) und nicht 
die Werte zu sortieren. 


3. Sortieren mit Bubblesort 


Bei der Folge 

1.08 

2. 30 

3.10 

haben wir „auf den ersten Blick“ erkannt, 
daß 10 die kleinste Zahl ist; folglich haben 
wir 10 mit 25 vertauscht, damit 10 zum 
kleinsten Element wurde. Danach haben 
wir bei 

1.10 

2.30 

3.25 

„auf den zweiten Blick“ erkannt, daß 25 
die zweitkleinste Zahl ist; folglich haben 
wir 30 mit 25 vertauscht, womit 30 zum 
drittkleinsten (= größten) Element wurde. 
Dieses „intuitive Sortierverfahren“ ist 
nicht nur für den Computer, sondern — bei 
größeren Mengen von zu sortierenden 
Elementen — auch für den Menschen völlig 
ungeeignet. Sie glauben mir nicht? Dann 
unterbrechen Sie bitte die Lektüre dieses 
Aufsatzes und suchen Sie einmal, nach- 
dem Sie sich das heutige Datum notiert 
und vorsorglich eine Krankmeldung an Ih- 
ren Arbeitgeber geschickt haben, das fünf- 
zigkleinste Wort aus diesem Peeker-Heft 
heraus. ... Wieviele Tage sind seit Beginn 
der „Suchaktion“ verstrichen? 


Holzhammer und Köpfchen 


Sieht man einmal von der intuitiven Me- 
thode ab, so lassen sich die Sortierverfah- 
ren in zwei Gruppen einteilen: 

a) Holzhammer-Algorithmus 

b) Köpfchen-Algorithmus. 


Da Programme in Assembler bis zu hun- 
dertmal schneller als in BASIC oder Pascal 
sind, bedient man sich in anderen Berei- 
chen häufig primitiver, aber sehr schneller 
Assembler-Programme. Bei Sortierpro- 
grammen versagen jedoch die Holzham- 
mer-Verfahren, denn es läßt sich leicht 
nachweisen, daß ein Quicksort-Programm 
in Applesoft schneller als ein Bubblesort- 
Programm in Assembler ist, z.B. wenn ein 
Array mit 1000 Zahlen sortiert werden soll. 
Betrachten wir zu diesem Zweck den Bub- 
blesort oder die „Blasensortierung“ als 
das primitivste Holzhammer-Verfahren. 
Der Bubblesort durchläuft wiederholt alle 
Elemente vom ersten bis zum vorletzten 
und vergleicht dabei jeweils das nächste 
Elements (X + 1) mit dem momentanen 
Element (X). Wenn das nächste Element 
kleiner als das momentane ist, werden 
beide Elemente vertauscht. Die Sortierung 
wird beendet, wenn bei einem (= dem 


10 


letzten) Durchlauf keine Vertauschung 
mehr erforderlich war. Beispiel anhand un- 
serer 3 Zahlen: 


Erster Durchlauf 

1.23 

2. 30 

3.10 

2. mit 1. Element vergleichen (V1) 
30 < 25: nein, kein Tausch 

3. mit 2. Element vergleichen (V2) 
10 < 30: ja, tauschen (T1) 

Es wurde getauscht, also weiter. 


Zweiter Durchlauf 

1:29 

2.10 

3.30 

2. mit 1. Element vergleichen (V3) 
10 < 25: ja, tauschen (T2) 

3. mit 2. Element vergleichen (V4) 
30 < 25: nein, kein Tausch 

Es wurde getauscht, also weiter. 


Dritter Durchlauf 

1.10 

2.25 

3.30 

2. mit 1. Element vergleichen (V5) 

25 < 10: nein, kein Tausch 

3. mit 2. Element vergleichen (V6) 

30 < 25: nein, kein Tausch 

Es wurde nicht getauscht, also Ende. 


Insgesamt waren hier nur 2 Tauschopera- 
tionen (T2) und 6 Vergleichsoperationen 
(V6) erforderlich. In Wirklichkeit ist der 
Bubblesort, bei dem mit jedem Durchlauf 
die nächstgrößere Zahl wie eine Blase (= 
bubble) im Wasser nach oben transportiert 
wird, das ineffizienteste Sortierverfahren 
überhaupt. 

Die Effizienz eines Sortierverfahrens 
hängt von der Anzahl der Tausch- und 
Vergleichsoperationen ab. Als Faustregel 
können Sie davon ausgehen, daß Sie für 
das Sortieren eines Arrays mit 1000 Ele- 
menten beim Bubblesort mit ca. 1.000.000 
Vergleichen und bei Quicksort mit 10.000 
Vergleichen rechnen müssen. Damit ist 
der Quicksort — wiederum als Faustregel — 
etwa 100mal schneller als der Bubblesort. 
Daraus erhellt zugleich, daß ein Assem- 
bler-Bubblesort kaum eine Chance gegen 
einen Applesoft-Quicksort hat. 


4. Sortieren mit Quicksort 


Vorsortierung 


Angenommen, Sie hätten die unangeneh- 
me Pflicht, 10.000 Adreß-Karteikärtchen 
manuell nach dem Alphabet zu sortieren. 
Dann würden Sie sicherlich zunächst eine 
Vorsortierung vornehmen, indem Sie ge- 


trennte „Häufchen“ mit den „A“-Adres- 
sen, „B“-Adressen usw. anlegen würden. 
Das sich dann beispielsweise ergebende 
„S"-Häufchen würden Sie ferner in „ST”- 
und „SCH“-Teilhäufchen zerlegen usw. 
Jedes der Häufchen würde einen Bereich 
(= Abschnitt) darstellen, der insgesamt 
alphabetisch kleiner oder größer als die 
anderen Häufchen ist, d.h. alle Kärtchen 
des „B“-Häufchens sind z.B. kleiner als 
die Kärtchen des „C“-Häufchens, aber 
größer als die Kärtchen des „A“-Häuf- 
chens. Doch sind die Kärtchen des „B"- 
Häufchens zunächst noch nicht in sich 
sortiert. 


Mechanische Zerlegung 


Quicksort arbeitet nach dem soeben skiz- 
zierten Prinzip der Aufteilung oder Zerle- 
gung in Bereiche (englisch „partition“), 
doch werden die Bereiche nicht nach 
sachlichen Kriterien, sondern rein mecha- 
nisch gebildet. Bei alphabetischer Sortie- 
rung sind die Buchstaben-Häufchen sach- 
lich begründbar, obwohl Sie sehr schnell 
merken werden, daß manche Anfangs- 
buchstaben extrem häufig (z.B. „S“) und 
andere extrem selten (z.B. „Y“) vorkom- 
men. Wenn Sie jedoch 10.000 Zahlen, 
deren „Streuung“ Sie nicht kennen, ma- 
nuell zu sortieren hätten, dann würden Sie 
feststellen, daß man bei größeren 
Datenmassen nur mit einer mechanischen 
Aufteilung weiterkommt, zumal ein Com- 
puter mit „sachlichen Kriterien“ ohnehin 
nichts anfangen kann. 


Quicksort-Protokoll 


Betrachten wir nunmehr die Tabelle, die 
die aufsteigende Sortierung von 20 Zu- 
fallszahlen im Werttausch-Verfahren 
Schritt für Schritt nachvollzieht. In der lin- 
ken Spalte befinden sich die Zeilennum- 
mern 

01: 

02: 

usw. bis 

Sr; 

Zeile 1 enthält 20 unsortierte Zahlen 

01: 35, 43, 98..., 
während Zeile 2 die Nummern (= Indizes) 
der Zahlen 

02:01, 02, 03... 

angibt. 


Bis zur ersten Teilung 


Betrachten wir nun die Zeile 1 mit den 20 
Ausgangswerten. Zunächst ist dieser Be- 
reich 1-20 noch ungeteilt, wobei das 1. 
Element das linke oder untere Begren- 
zungselement und das 20. Element das 
rechte oder obere Begrenzungselement 
darstellt. Wie gelangen wir nun zur ersten 


Peeker 1/86 





Indem man eine willkürliche 


Teilung? 
Halbierung vornimmt. Dies löst jedoch 
noch nicht das Problem des Aufteilungs- 
kriteriums. Quicksort vollzieht daher fol- 
genden mechanischen Dreierschritt: 


a) Zuerst wird ein sich etwa in der Mitte 
vom linken und rechten Begrenzungsele- 
ment befindliches sog. mittleres Element 
selektiert, und zwar hier das 10. Element 
(s. Zeile 2, rechter Rand). Man beachte, 
daß dieses mittlere Element später nicht 
notwendigerweise die Teilungsgrenze für 
die zwei Hälften darstellen wird. 


b) Dann wird der Wert dieses mittleren 
Elements (hier 72, s. Zeile 2, rechter 
Rand) willkürlich zum Vergleichswert er- 
klärt. 


c) Schließlich wird der Wert des mittleren 
Elements mit dem Wert des linken, unter- 
sten Elements vertauscht. Konkret heißt 
dies hier, daß der Wert 72 des 10. Ele- 
ments mit dem Wert 35 des 1. Elements 
ausgetauscht wird (s. Zeile 3). Der Sinn 
dieses sog. Ersttausches hängt mit dem 
„Durchdrehen“ des Algorithmus zusam- 
men (S.u.). 


Es ergibt sich damit in Zeile 3 folgende 
neue Ausgangssituation: Ein Vergleichs- 
wert (72) ist aufgrund des mittleren (10.) 
Elements bestimmt worden, und das un- 
terste (1.) Element ist mit dem mittleren 
(10.) Element vertauscht worden. Wir be- 
trachten weiterhin die Zeile 3: 


Aufsteigendes Suchen: Da das unterste 
Element bereits durch den Ersttausch vor- 
läufig „abhackt“ worden ist, suchen wir ab 
dem zweituntersten (hier 2.) Element von 
links nach rechts einen Wert, der dem 
Vergleichswert größer/gleich ist. Die 43 
als Wert des 2. Elements ist nicht größer 
als der Vergleichswert 72, wohl aber die 
98 als Wert des 3. Elements. 


Absteigendes Suchen: Nachdem wir die 
98 gefunden haben, suchen wird ab dem 
obersten (hier 20.) Element von rechts 
nach links einen Wert, der dem Ver- 
gleichswert kleiner/gleich ist. Dies ist hier 
gleich bei dem 20. Element der Fall, des- 
sen Wert 29 kleiner als der Vergleichswert 
72 ist. 


Normaler Tausch: Nachdem wir aufstei- 
gend bzw. absteigend jeweils einen Wert 
gefunden haben, der größer/gleich bzw. 
kleiner/gleich in bezug auf den Ver- 
gleichswert ist, vertauschen wird diese ge- 
fundenen Werte. Das heißt hier konkret, 
daß die 98 mit der 29 vertauscht wird. Die 
erfolgte Vertauschung ist aus der Zeile 4 
ersichtlich. 


Peeker 1/86 





Weitere Suche: Da die 98 das 3. Element 
und die 29 das 20. Element waren, setzen 
wir unsere aufsteigende Suche mit dem 4. 
Element und die absteigende Suche mit 
dem 19. Element fort. Wir finden dann die 
Werte 94 (7. Element) und 18 (18. Ele- 
ment), deren erfolgte Vertauschung aus 
der Zeile 5 hervorgeht. Die Zeile 6 belegt 
noch die Vertauschung von 83 (8. Ele- 
ment) und 34 (16. Element) sowie die 
Zeile 7 die Vertauschung von 81 (14. Ele- 
ment) und 45 (15. Element). 


Letzttausch: Wenn man jetzt, nachdem 
man von links beim 14. Element und von 
rechts beim 15. Element angelangt ist, die 
Suche fortsetzt, überkreuzen sich die 
Nummern der Elemente. Deshalb been- 
den wir mit der ersten Überkreuzung 
(Überlappung) das Suchen und vertau- 
schen nunmehr den Wert des 14. Ele- 
ments (45), der sich beim absteigenden 
Suchen ergab, mit dem Wert des 1. Ele- 
ments (72), das vom Ersttausch herrührte 
und gleichzeitig während des gesamten 
Suchvorgangs den Vergleichswert dar- 
stellte. Wenn nämlich der beim überlap- 
pend absteigenden Suchen gefundene 
Wert 45 kleiner als der Vergleichswert 72 
ist und das 1. Element den Vergleichswert 
beinhaltet, dann können wir getrost 45 mit 
72 vertauschen, womit der Vergleichswert 
72 als 14. Element seine endgültige Po- 
sition erhält. Das Ergebnis des Letzttau- 
sches ist aus Zeile 8 ersichtlich. 


Was haben wir damit erreicht? 

1. Der Bereich der Elemente 1-13 enthält 
jetzt nur noch Werte, die dem Wert des 14. 
Elements, d.h. dem Vergleichswert, klei- 
ner oder gleich sind. 

2. Der Bereich der Elemente 15-20 enthält 
jetzt nur noch Werte, die dem Wert des 14. 
Elements, d.h. dem Vergleichswert, grö- 
Ber oder gleich sind. 

3. Der Wert des 14. Elements, d.h. der 
Vergleichswert, ist bereits endgültig, d.h. 
die Position des 14. Elements wird sich bei 
den nachfolgenden Teilungen und Such- 
vorgängen nicht mehr ändern. Damit ha- 
ben wird zwei vorsortierte Teilbereiche ge- 
wonnen, nämlich den Bereich 1-13 sowie 
den Bereich 15-20, denn der Bereich 1-13 
ist in bezug auf den Bereich 15-20 insge- 
samt kleiner oder gleich. Die zwei Teilbe- 
reiche sind jedoch noch nicht in sich sor- 
tiert. 

4. Man beachte, daß die Teilung nicht di- 
rekt mit dem mittleren Element zusam- 
menhängt. Aufgrund des mittleren (10.) 
Elements hätten sich die Teilbereiche 1-9 
und 11-20 ergeben. In Wirklichkeit sind wir 
jedoch bei den Teilbereichen 1-13 und 15- 
20 angelangt. 


E GRUNdlAgeN PP 


Bevor Sie nun weiterlesen, sollten Sie den 
bisherigen Ablauf anhand der Zeilen 1-8 
nochmals nachvollziehen. Wir wiederho- 
len den Algorithmus in Kurzform: 

1. Bereichsgrenzen (Unter- und Ober- 
grenze) ermitteln; in Zeile 2 durch halbfett 
gedruckte Ziffern ersichtlich. 

2. Mittleres Element willkürlich auswählen 
und dessen Wert zum Vergleichswert er- 
klären; s. Zeile 2 rechts: Mitte: 10, V(er- 
gleichwert): 72. 

3. Wert des untersten Elements mit dem 
Wert des mittleren Elements vertauschen; 
Ss. Zeile 3: Ersttausch. 

4. Ab dem zweituntersten Element nach 
rechts aufsteigend und ab dem obersten 
Element nach links absteigend jeweils ein 
Element suchen, das größer-gleich/klei- 
ner-gleich als der Vergleichswert ist. 
Wenn die aufsteigende/absteigende Su- 
che noch zu keiner Überlappung geführt 
hat, Werte der Elemente vertauschen und 
weitersuchen und -tauschen; s. Zeilen 4- 
7: normaler Tausch. 

5. Andernfalls Wert des untersten Ele- 
ments mit dem Wert des absteigend-über- 
lappenden Elements vertauschen; s. Zeile 
8: Letzttausch. 


Nach der ersten Teilung 


Das Quicksort-Motto lautet: Was man das 
erste Mal getan hat, kann man auch das 
zweite Mal tun („Rekursionsprinzip“). 
Folglich wenden wir exakt denselben Al- 
gorithmus nunmehr auf die zwei Teilberei- 
che 1-13 und 15-20 an. Dies hört sich 
jedoch leichter an, als es in der Program- 
mierpraxis ist, denn wir müssen uns natür- 
lich diejenigen Bereiche merken, die mo- 
mentan nicht bearbeitet werden. In der 
Zeile 9 sind die Ziffern 1 und 13 halbfett 
markiert: Diese stellen die Begrenzungen 
des Bereichs dar, der zunächst gemerkt 
werden muß, und zwar auf dem Stack (= 
Stapel = Keller; im Applesoft-Demo-Pro- 
gramm als Pseudo-Stack-Array realisiert). 
In Zeile 9 rechts außen finden wir die 
Bemerkung 

Stack, F:15, L:20, 

die besagt, daß bei dem momentanen Be- 
reich das 15. das unterste (F = first) und 
das 20. das oberste (L = last) Begren- 
zungselement sind. 


Sie werden sich nunmehr drei Fragen 
stellen: 

1. Wie tief wird geteilt? Antwort: Bis ein 
Teilbereich nur noch aus zwei oder einem 
einzigen Element besteht. Aus Gründen 
der Übersichtlichkeit wird bei unserer Ta- 
belle die jeweils letzte Aufteilung, bei der 
das untere mit dem oberen Begrenzungs- 
element identisch ist, nicht angezeigt. In 
diesen Fällen enthält der Stack vorüberge- 
hend 2 gleiche Element-Nummern. 


11 





2. Wann ist die Sortierung abgeschlos- 
sen? Antwort: Wenn alle Teilbereiche 
komplett abgearbeitet worden sind, d.h. 
wenn der Stack wieder leer ist. 

3. Wie tief muß der Stack sein? Antwort: 
Wenn wir einen Pseudo-Stack-Array mit 
beispielsweise DIM SS% (30) anlegen 
und jeweils 2 Elemente für Unter- und 
Obergrenze eines „gemerkten“ Teilbe- 
reichs benötigen, so können 15 „gemerk- 
te“ Teilbereiche auf den Stack geschoben 
werden. In der Praxis ist dies für ca. 1000 
zu sortierende Elemente selbst bei „entar- 
teten Folgen“ stets ausreichend. Betrach- 
ten Sie hierzu die Zahl 1024: Einmal halbi- 
ert (= 2 Grenzwerte auf dem Stack), ergibt 
sich 512, danach 256, 128, 64, 32 usw. Da 
man sich bei nicht ganz „mittigen“ Teilun- 
gen immer den größeren (= mehr Ele- 
mente umfassenden) Bereich merkt und 
mit dem kleineren (= weniger Elemente 
umfassenden) Bereich fortfährt, kann der 
Stack nie überlaufen. Jetzt wird uns auch 
der Grund für das mysteriöse „mittlere 
Element“ klar: Theoretisch könnte man 
jedes beliebige Element des Teilungsbe- 
reichs als Vergleichswert herauspicken. 
Durch Selektion des mittleren Elements in 
Verbindung mit der Weiterbearbeitung der 
jeweils kleineren Bereiche befinden sich 
bei n (z.B. 1024) zu sortierenden Elemen- 
ten im Stack niemals mehr als Ib n (z.B. 
10) gemerkte Teilbereiche (Ib = Logarith- 
mus zur Basis 2;2 T 10 = 1024). 

Wenn Sie bei der Tabelle die Mitte-Zeilen 
2, 10 und 28 betrachten, sehen Sie sehr 
gut die T-Kreuz-Formen der Bereichstei- 
lungen, wobei der senkrechte T-Strich das 
jeweils endgültig positionierte Element an- 
zeigt. 


5. Anmerkungen zum 
Demo-Programm 


Das gelistete Demo-Programm QUICK- 
‚RANDOM erzeugt bei jedem Durchlauf 
eine neue Zufallszahlenfolge, während 
das zusätzlich auf die Peeker-Sammeldisk 
aufgenommene Demo QUICK.SPEZIAL 
drei „entartete“ Zahlenfolgen vorführt. 
Ferner enthält die Sammeldisk die TASC- 
compilierbare Spezialversiin QUICK- 
.TASC zur Geschwindigkeitsmessung. 


Sentinel 


Sentinel heißt Wachposten. So bezeichnet 
man im Englischen die Begrenzungswerte 
(Minimal- und Maximalwert). Beim aufstei- 
genden und absteigenden Durchsuchen 
eines Bereichs müssen Sie dafür Sorge 
tragen, daß die Suche nicht nach unten 
über den Anfangswert und nach oben über 
den Endwert „absaust“. 


12 


Untere Begrenzung: Nenn wir das jeweils 
unterste Element durch den Vergleichs- 
wert ersetzen, kann die absteigende Su- 
che niemals über das unterste Element 
hinausgehen, denn der Vergleichswert ist 
niemals kleiner als der Vergleichswert. 
Obere Begrenzung: Wenn das oberste 
Element mindestens dem größten Wert 
des gesamten Arrays entspräche, könnte 
die aufsteigende Suche niemals über das 
oberste Element hinausgehen. Da es hier- 
für jedoch keine Garantie gibt, muß man 
entweder durch einen vorgeschalteten 
einmaligen Bubblesort-Durchgang das 
größte Element zum obersten Element 
machen oder — wie bei unserem Demo- 
Programm - ein weiteres Element (SN% 
+ 1) mit dem maximalen Wert (hier 9999) 
belegen. Selbst wenn alle anderen Ele- 
mente den gleichen Wert 9999 hätten, 
würde die Sortierroutine niemals „ab- 
sausen“. 


Unnötiger Erst/Letzttausch 


Die Sentinel-Methode führt bei den klein- 
sten Teilbereichen zu einem unnötigen 
Erst- und Letzttausch. Betrachten wir hier- 
zu in der Tabelle die Zeile 54 mit dem 2- 
Element-Bereich vom untersten (4.) Ele- 
ment (Wert 31) bis zum oberste (5.) Ele- 
ment (Wert 32). Zunächst wird das 4. Ele- 
ment als Vergleichswert erkoren. Da das 
4. Element zugleich das unterste Element 
dieses Bereichs ist, wird das 4. Element 
mit dem 4. Element vertauscht (unnötiger 
Ersttausch). Da bei der nachfolgenden 
auf- und absteigenden Suche eine Über- 
lappung stattfindet, wird erneut das 4. Ele- 
ment mit dem 4. Element vertauscht (un- 
nötiger Letzttausch). 

Man muß hierzu jedoch wissen, daß jede 
zusätzlich eingebaute Prüfung, die unnöti- 
ge Vergleiche eliminiert, selbst in Form 
eines Vergleichs programmiert werden 
muß, der ebenfalls Zeit kostet, so daß eine 
Verfeinerung der hier vorgestellten Ap- 
plesoft-Quicksort-Implementierung kaum 
zu Zeitgewinnen führen würde. 


Sonderfälle 


Das Demo funktioniert nur, wenn der zu 
sortierende Array mindestens 2 Elemente 
umfaßt. Ursprünglich für Zahlen-Arrays 
gedacht, läßt sich das Programm leicht für 
String-Quicksort umschreiben, indem man 
die Hilfsvariablen T und SV durch T$ und 
SV$ sowie den Array T (SN%) durch T$ 
(SN%) ersetzt. 


Geschwindigkeit 


Abschließend sei darauf hingewiesen, daß 
die TASC-compiliette Version von 
QUICK.TASC zum Sortieren eines Inte- 





ger-Arrays mit 1000 Elementen ca. 17 Se- 
kunden benötigt. Dagegen bringt es die 
nicht-compilierte Applesoft-Version 
QUICK.TASC nur auf 215 Sekunden. Der 
TASC-Compiler bewirkt hier also eine 
12fache Geschwindigkeitssteigerung. Die 
Assembler-Quicksort-Routine von Harald 
Grumser bewirkt nochmals eine 5fache 
Steigerung gegenüber der bestmöglichen 
TASC-Version. 


Kurzhinweise 


1. Zweck: 

Demonstration von Quicksort. 

2. Konfiguration: 

Apple Ile/c/+ mit einer 80-Zeichenkarte, 
die die Applesoft-Befehle INVERSE/NOR- 
MAL erkennt; DOS 3.3 oder ProDOS. 

3. Test: 

RUN QUICK.RANDOM 

RUN QUICK.SPEZIAL 

RUN QUICK.TASC 

RUN QUICK.DISK 

4. Sammeldisk: 

QUICK.RANDOM 

QUICK.SPEZIAL 

QUICK.TASC 

QUICK.DISK 


DB-MEISTER 


Adreß- und Schemabriefprogramm 


Der DB-Meister ist ein in Assembler ge- 
schriebenes, ungewöhnlich schnelles, un- 
kompliziertes und zugleich „narrensicheres“ 
Adreß-, Datei- und Schemabriefprogramm. 
Technische Daten 
— Recordlänge bis zu 230 Zeichen 
560 bis 1000 Records pro Datendiskette 
Maximal 25 Felder pro Record 
Suche nach 3 Indexfeldern 
Ausdruck der Dateien als Etiketten, Listen 
und Schemabriefe (mit Felder- und Tasta- 
tureinschüben an beliebigen Stellen des 
Formbriefes) 
normal kopierbare Programmadiskette, un- 
terteilt in Hauptprogramme und diverse 
Hilfsprogramme 
— einsatzfähig auf Apple Ile und Ilc mit 
2 Drives (1 Drive ebenfalls möglich) 


Gesamtpreis 290,— (2 Disketten + ge- 
drucktes Manual) 

U. Stiehl 

c/o Dr. A. Hüthig Verlag 

Postfach 10 28 69 : 6900 Heidelberg 





Peeker 1/86 


QUICK.RANDOM 


Erzeugt tabellarisches Sortierprotokoll 
von 2® Zufallszahlen, die mit jedem RUN 
neu erzeugt werden. 


Laden mit LOAD QUICK.RANDOM 
Entweder 8®-Zeichenkarte mit PR#3 
einschalten oder 

in Zeilen 76® und 788 Druckbefehle 
für Fettdruck/Normaldruck statt 
INVERSE/NORMAL einsetzen und 
Drucker mit PR#1l einschalten. 
Jeweils mit RUN neue Tabelle 
generieren. 


HOME : GOSUB 76ß: 


PRINT "Quicksort-Demo von U.Stiehl";: 


GOSUB 789: PRINT 

REM 28 Zufallszahlen 

SNZ = 20: DIM T(SN% + 1) 

Z = ®: REM Zeilenzähler 
GOSUB 800: FOR X = 1 TO SN%: 
T(X) = INT (98 * RND (1)) + 19: 
PRINT T(X);" ";: NEXT X: 
PRINT "unsortiert" 

GOSUB 199: REM Sortieren 
GOSUB 800: FOR X = 1 TO SN?: 
PRINT TIA):”" ":: NEXT X: 
PRINT "sortiert" 

END 


Initialisierung 


REM T(SN%+1) 


Inkrement-'Sentinel' = maximaler Wert 


T(SN% + 1) = 9999 

REM Array von SF%=First Element 
bis SL%=Last Element sortieren 
SFZ = 1:SL% = SNZ 

DIM SS%(39):SC% = ® 


Bereich ermitteln ("Partition") 


REM Wenn SF%>=SL% dann Stack prüfen 
IF SF$ > = SLZ THEN 520 

REM Dekrement-Zeiger SD% 
vorläufig auf SL%+1l setzen 

SD% = SLZ + 1 

REM Inkrement-Zeiger SI% 

auf SF% setzen 

SIZ = SF% 

REM Mittlere Positon SM% zwischen 
SF% und SL% ermitteln 

SMZ = INT ((SL% - SF%) / 2) + SF%: 
GOSUB 569: REM Anzeige 


Ersttausch 
REM SM%-Wert zum Vergleichwert SV 


machen und SM%-Wert mit SF%-Wert 
tauschen; Ersttausch; 


Dekrement-'"Sentinel' = minimaler Wert 


SV = T(SM%) :T(SM%) = T(SF%): 
T(SF%) = SV: GOSUB 629: GOSUB 7ß®: 
REM Anzeigen 


Inkrement und Dekrement 
REM SI% erhöhen, solange T(SI%) < ST 


SIZ = SIX + 1: IF T(SI%) < SV 
THEN 349 


REM SD% vermindern, solange T(SD%) > SV 


SDE = SDZ - 1: IF T(SDZ) > SV 
THEN 36% 

REM Überkreuzen sich SI% und SD%? 
IF SDZ < = SI% THEN GOTO 43% 


Normaler Tausch 


REM Wenn nein, momentanen SI%-Wert 
mit SD%-Wert tauschen; 

normaler Tausch 

AT = TISIEN:T(5I2) = TIB3): 

T(SD%) = TT: GOSUB 749: REM Anzeigen 
GOTO 349 


Letzttausch 
REM Wenn ja, SF%-Wert durch SD%-Wert 


und SD%-Wert durch SV ersetzen; 
Letzttausch 


T(SF%) = T(SD%):T(SDZ) = SV: 
GOSUB 720: REM Anzeigen 


Stack-Routine 


REM Größeren Teilabschnitt ermitteln 
IF SD% - SF% < SL% - SD% THEN 48® 
REM SF% und SL% des neuen 

Bereichs auf Stack schieben 
SSZ(SCZ + 1) = SF%: 

SSZ(SCZ + 2) SsD% - 1: 

SF% = SD% + 1: GOTO 599 

SSZ(SCZ + 1) = SDZ + 1: 

SSZ(SCZ + 2) = SLZ:SLZ = SD - 1 
REM Stack-Counter SC%Z um 2 erhöhen 
Ssc% = SC% + 2: GOTO 249 

REM SF% und SL% des letzten 
Bereichs vom Stack holen 

IF SC% > ® THEN SL% = SS%(SC%): 
SF% = SSZ(SC% - 1):SC% = SC% - 2: 
GOTO 249 

REM Sortieren beendet, 

wenn SC% = ® ist 

RETURN 


Tabelle anzeigen 


REM *%*%* Anzeigen *%*%* 

IF SC%A = ® GOTO 619 

GOSUB 809: FOR Y = 1 TO SN% 

FOR X = 1 TO SC%: 

IF SS%(X) = Y THEN GOSUB 76: 

X = SC% 

NEXT : IF Y < 1® THEN PRINT "®"; 


PRINT Y;: GOSUB 7898: PRINT " ";:NEXT: 


FRINT "Stack; #:":574:"  L:":5L8 
RETURN 

GOSUB 809: FOR Y = 1 TO SN% 

IF Y = SF% THEN GOSUB 769 

IF Y < 18 THEN PRINT "9"; 

PRINT Y; 

IF Y = SL% THEN GOSUB 78® 

PRINT "= 

NEXT : PRINT "Mitte ";SM%;",V:";SV 
RETURN 

GOSUB 809: FOR Y = 1 TO SN%: 

IF Y = SM% OR Y = SF% THEN GOSUB 769 
PRINT T(Y);: GOSUB 780: PRINT " ";: 
NEXT Y: PRINT "Ersttausch": RETURN 
GOSUB 808: FOR Y = 1 TO SN%: 

IF Y = SF% OR Y = SD% THEN GOSUB 769 
PRINT T(Y);: GOSUB 788: PRINT " ";: 
NEXT Y: PRINT "Letzttausch": RETURN 
GOSUB 809: FOR Y = 1 TO SN%: 

IF Y = SI% OR Y = SD% THEN GOSUB 769 
PRINT T(Y);: GOSUB 788: PRINT " ";: 
NEXT Y: PRINT "Tausch": RETURN 
INVERSE : GOTO 779: REM Dummy!!! 
PRINT CHR$ (27); CHR$ (71); 

F = 1: RETURN 

IF F= ] THEN F = ®: NORMAL 

GOTO 799: REM Dummy!!! 

PRINT CHR$ (27); CHR$ (72); 

RETURN 

Z=2Z+ 1: IF Z< 19 THEN PRINT "9"; 
PRINT Z; ": ";: RETURN 


Variablen 


8208 REM SNZ=Dimension des Zahlenarrays 
830 REM SF%=First=Anfang des Bereichs 
840 REM SM%=Mitte des Bereichs 

859% REM SL%=Last=Ende des Bereichs 
860 REM SI%=Inkrement-Zeiger 

870 REM SD%=Dekrement-Zeiger 

880 REM SS%=Stack=Stapel 

898 REM SC%=Stack-Counter 

900 REM SV=Vergleichshilfsvariable 
91® REM TT=Tauschhilfsvariable 

928 REM T(SN%)=Zahlenarray 


QUICK.SPEZIAL 


Das analoge Programm QUICK.SPEZIAL, 
das sich auf der Peeker-Sammeldisk 
befindet, demonstriert 3 Spezial- 
fälle von zu sortierenden Arrays: 

a) aufsteigend vorsortierte Elemente 
b) absteigend vorsortierte Elemente 
c) völlig gleiche Elemente. 


Apple und IBM 
kompatible Computer 


16K, Z80, Diskcontroler je. . . . . 75- 
80 Zeichenkarte mit Softswitch 

2 Zeichensätze . . . . 2....149,- 
Motherboard 48K ohne Firmware . .419,- 
Erphi-controler mit Autopatch . . . 300,- 
Siemenslaufwerk F 122 . .. .. ....515,- 
TEAC FD-55B 2 x 40 Track . . . .375,- 
TEAC FD-55F 2 x 80 Track . . . .395,- 
FD4 Spezialcontroler für Laufwerke 
mit bis zu2x 80 Track . . . . ..120,—- 
Drucker Star SG 10 . . . . 940,— 
Monochrome Monitore . . . . ab 375,- 
Farbmonitore . . . 2 202.....ab 998,- 
Tastaturen für IBM und Apple . ab 330,- 


Versand nur per Nachnahme oder Vorkasse. 


Weiteres Zubehör für Apple und IBM gegen 
frankierten Rückumschlag. 

Preissenkung: 

128K Karte (Saturn kompatibel) . 248,— 
Preissenkung 4164-200 ns 
Mindestabnahme 20 Stck... . . . . 2,50 


Zusatzkarten und Motherboard ausnahmslos 
deutsche Fertigung mit ausgesuchten Bauteilen. 


Ulf Mohwinkel Electronic 
Berliner Straße 73 Pf: 250 166 
5090 Leverkusen Fettehenne 

Telefon 0214/93781 od. 95060 


Preisliste kostenlos 
Katalog DM 2,- 
in Briefm. 


Unser Dezember-Angebot: 


Profimax Ile, APPLE Ile kompatibel, 
IBM-Look nur 1398.—- 


Profimax Ill, APPLE II+ kompatibel, 
2 Prozessoren IBM-Look nur 1098,— 


Chinon-Laufwerk 051A nur 398.- 
Video-Digitalisierer incl. Software nur 298.- 
STAR sg-10, original, mit Serien-Nr. nur 998.- 


Centronics-Interface, grafikfähig nur 118.- 


D.O.S Computersysteme 


der Partner für Schule, Hochschule, Forschung, Fertigung 


Am Kühnbach 42, 7170 Schwäb. Hall 11 
Tel. 07 91/5 1736 





Vi 


berlın ım Apple Il+ 354 «x 


VIDEO-1000. 


ITIZER ZUM APPLE IL 


295; -DM 


ung 384x288 Bildpunkte 
F ecorder und Kamera 
mezeit msec 

nung auf HIRES-Seite 


Eensoht&raustüfen, DoubpleHiresz Kursiiim- 
ng etc auf Anfrage. 





odisk gegen Einaendung von 10 DM oder V-Scheck. 
P- . 


o gratis. Versand oder beim Fachhändler. 


Ing.Büro M,Fricke, Neue_Str.13 1000 Berlin 37 
Telefon! 030 / sol 56 32 





Peeker 1/86 








AKUSTIK-KOPPLER - Dataphon 321 
300 Baud Modem , nach CCITT Y.21 Standard, 
m. FTZ-Nr. 18.13.191 7.00, Gebühren- und 
anmeldefrei, Y24/RS-232 Standard-Schnittst. 





nur DM 298,00 


OMMUNIKAT = PLETT - PAKET 
geeignet für Apple //+ und Apple //e: 
I Dataphon s21d, 
1 Anschlußkabel: V.24 zum Apple II-Game-I/O, 
I Terminalprogramm: "HIB Modem-Transfer" 


QUICK.DISK 
Externes Sortieren 


nur DM 349,00 


Wenn eine Datei so groß ist, daß nicht einmal die 
Sortierfelder (= Schlüssel) geschweige denn die Datensätze 
selbst in den Speicher eingelesen werden können, muß man 


-Lauf Testbericht i 
für rn //+ und Apple //e anschlußf. im Gehäuse DM 498,00 


extern auf der Diskette, Festplatte oder RAM-Disk sortieren. W.o. jedoch für Apple /Ic DM 569,00 
Die nachfolgende QUICK.DISK-Routine gestattet das externe 

Sortieren einer beliebig großen Random-Datei (2 1 15 Sätze). 

Das Demo selbst, das unter DOS 3.3 und ProDOS funktioniert, laufwerke zum rpreis! 

ist jedoch auf maximal 9999 Astellige Zahlen begrenzt, was ND 06 D, 2x 80 Track, 640 K-Byte formatiert DM 498,00 


für die 64K-Karte-RAM-Disk ausreicht = 59.®@® Bytes. 
Von der Verwendung eines normalen Diskettenlaufwerks muß DISK- PEL-STATION (APPLE //+., APPLE //e 


dringend abgeraten werden, denn; dies würde bei 10.000 2x ND 06-D im Geh. + Auto-Patchcontr., 1,2 MB DM 1598,00 
Zahlen Tage dauern. Die Sortierroutine eignet sich demnach 
nur entweder für eine RAM-Disk oder eine Festplatte. AUTO-PATCH-CONTROLLER DM 298,00 
1® TEXT : HOME : INVERSE : PRINT "QUICKSORT-DISK'": NORMAL 
12 SB = 1: PRINT : INPUT "Wieviele Zahlen: ";SN: IC-Test-Karte (Testet ca. 500 verschiedene IC‘s) DM 398,00 
SN = INT (SN): IF SN < 2 OR SN > 9999 GOTO 12 
14 PRINT : PRINT e- EGPArLPARNLEN er nn ® ROTHER-Matri ie Super- er! 
” ar Er en a Si M- 1009 (Matrixdrucker , RS-232 + Centronics) DM 429,00 
18 FOR X = SB TO SN:TT = INT (9000 * RND (1)) + 1999: M- 1009 anschlußfertig an: 
PL.= FL + Sr Apple //c (mit Drucker-Kabel) DM 529,00 
20 PRINT CHRS (4)"WRITE Z,R"X: PRINT TT: NEXT X Apple //e (mit Oraphik-Interface und Kabel) DM 629,00 


22 PRINT CHR$ (A)'"WRITE Z,R"X: PRINT 9999: 
PRINT CHR$ (4)"CLOSE 2" 


24 PRINT : PRINT "Stoppuhr ";: GET X$: PRINT CHR$ (7): Alle Preise inclusive der gesetzlichen Mehrwertsteuer. 
GOSUB 36:X = PEEK (49168) Berechnung der Versandkosten erfolgt nach Entfernung und Gewicht. 
26 IF PEEK ( - 16384) < 127 THEN CALL - 1959: GOTO 26 Fordern Sie noch heute unsere Gratispreisliste an'Wiederverkäufer bitte nur 


28 PRINT : PRINT "Prüfsumme ermitteln...": srr1: ‘ . 
PRINT CHR$ (4)"OPEN Z,L5": PRINT CHR$ (4)"READ Z,RB": schriftlich anfragen (Kopie der Gewerbeanmeldung beilegen!). 
INPUT SN o 

30 TV = Ö: FOR X = SB TO SN: PRINT CHR$ (4)"READ Z,R"X: 

INPUT TT:P2 = P2 + TT: IF TV > TT THEN 
PRINT CHR$ (4)"CLOSE Z": PRINT "Fehler": END 

32 TV = TT: NEXT : PRINT CHR$ (4)"CLOSE Z": 
PRINT Pl: PRINT P2 

34 END 


HIB Computerladen 

Äuß. Bayreuther Str. 72 - Telefon: 0911 / 515 939 
Postfach 21 01 25 - Telex: 17 - 911 8253 
8500 Nürnberg 21 - Teletex: 2526 - 911 82 53 


Unterroutine für externes Quicksort 


36 PRINT "Sort-Anfang": 
SF = SB:SL = SN: DIM SS(38):SC = 9 
38 PRINT CHR$ (4)"OPEN Z,L5" 
ad ON SF < SL GOTO 44: IF SC > ® THEN 
SL = SS(SC):SF-= SS(SC — 1):SC = SC - 2: GOTO 49 
42 PRINT CHR$ (A)"CLOSE Z": PRINT "Sort-Ende": RETURN 
44 SD = SL + 1:SI = SF:SM = INT ((SL - SF) / 2) + SF 
46 PRINT CHR$ (A)"READ Z,R"SM: INPUT TV: 
PRINT CHR$ (A)"READ Z,R"SF: INPUT TT: 
PRINT CHR$ (A)"WRITE Z,R"SM: PRINT TT: 
PRINT CHR$ (A)"WRITE Z,R"SF: PRINT TV 
48 SI = SI + 1: PRINT CHR$ (4A)"READ Z,R"SI: 
INPUT TI: IF TI < TV THEN 48 
50 SD = SD - 1: PRINT CHR$ (4)"READ Z,R"SD: 
INPUT TD: IF TD > TV THEN 5® 
52 IF SD > SI THEN PRINT CHR$ (4A)"WRITE Z,R"SI: 
PRINT TD: PRINT CHR$ (A)"WRITE Z,R"SD: 
PRINT TI: GOTO 48 
54 PRINT CHR$ (A)"WRITE Z,R"SF: PRINT TD: 
PRINT CHR$ (4A)"WRITE Z,R"SD: PRINT TV 
56 IF SD - SF < SL - SD THEN 
SS(SC + 1) = SD + 1:SS(SC + 2) = SL: 
SL = SD - 1:SC = SC + 2: GOTO 49 
SS(SC + 1) = SF:SS(SC + 2) = SD - 1: 


Die ProDOS-Analyse 


Version 1.0.1, 1.0.2, 1.1.1 
von Arne Schäpers 


1985, 470 S., kart., 
DM 68,- 
ISBN 3-7785-1134-3 


„Die ProDOS Analyse“ ist die umfangreichste und detail- 
lierteste Darstellung, die jemals ein Apple-Betriebssystem 
erfahren hat. Wer die „Innereien“ von ProDOS bis zum 
letzten Byte, z. T. bis ins letzte Bit kennenlernen möchte, 
braucht dieses Buch. Das komplette Betriebssystem (Urla- 


5 der, MLI; Disk-Driver, RAM-Disk-Driver und Uhr-Routine) 


00 


14 


SF = SD + 1:SC = SC + 2: GOTO 49 
60 REM Für 9999 Zahlen ca. 1 Stunde Sortierzeit 
unter ProDOS + RAM-Disk + Accelerator 


Bemerkung: 


Die Sortierzeiten wären in der Praxis unvertretbar. Des- 
halb kommen anstelle des externen Sortierens in der 
Regel Misch- oder Merge-Programme zum Einsatz. 
Hierüber wird in einem gesonderten Peeker-Aufsatz 
berichtet. 

‘ 


mit Ausnahme des BASIC-SYSTEM wird mit umfangrei- 
chen Kommentaren und Übersichtstabellen disassem- 
bliert. Dabei werden alle bisherigen Versionen von 1.0.1 
bis 1.1.1 berücksichtigt. „Die ProDOS-Analyse“ be- 
schreibt erstmals auch mehrere Programmierfehler, die bis 
in die neueste Version zu finden sind. Auch die nicht im 
„Technical Reference Manual” aufgeführten Eigenschaften 
von ProDOS werden analysiert und beschrieben, z. B. die 
vertrackten eingebauten Testroutinen zur Identifikation der 
verschiedenen Apple-Il-Modelle und eventueller Nachbau- 
geräte. Programmierer, die ProDOS versionsabhängig 
„patchen“ möchten, erhalten hier den genauen Überblick, 
wo was geändert werden muß, damit dies keine negativen 
Konsequenzen hat. Durch die minutiöse theoretische Se- 
zierung von ProDOS eröffnen sich völlig neue program- 
mierpraktische Perspektiven. 


Dr. Alfred Hüthig Verlag 
6900 Heidelberg - Postfach 10 2860 











Ze UNIVERSAL 
m KEYBOARDS 


Modell AN95SFE...DM 448,— ohne MwSt. (DM 510,72 incl. MwSt.) 
Die KEYBOARDS SPEZIELL angepaßt für den APPLE Ile 


Händleranfragen erwünscht 


Ausgabe und 
Eingabe mit 


Ausgabe mi 


TYPETERM® 
JUNIOR 


im Slot Ihres 


APPLE Il/lle 


Paketpreis DM 899,— 
Schreibmaschine AX-10 mit 
Interface TYPETERM JUNIOR, 





TYPETERM® 


im Slot Ihres 


APPLE IlV/lle 


Das bedeutet: Computer- 
textverarbeitung von der 
Schreibmaschinentastatur '! 





Steckerfertig ohne Umbau. steckfertig. 
TYPETERM- DM 479,- 

Interface 

für alle BROTHER-Typenrad- pi 
schreibmaschinen ab CE-51 HELEN TÜR! 

En = a a S e FLEXIBEL — ‚Jede Taste frei im EPROM programmierbar in 
.. DM 1348, ann N, bis zu 8 Ebenen im iceleeren EPROM 
CE-51 mit TYPETERM re e PROFESSIONELL — Für Anwender mit gehobenen Ansprüchen 
CE-61 mit TYPETERM DM 1737,- e ERGONOMISCH — Nach DIN ULTRAFLACH gestaltetes stabiles 
CE-70 mit TYPETERM i Gehäuse 
EM-80 mit TYPETERM QUALITÄT AUS ERSTERHAND.__—— _ © KOMPLETT — Tastatur, Gehäuse und Kabel fertig montiert 


TYPETERM-Kit für CE-50 DM 468,- 


und getestet. Durch Spezial-Kabel und Spezial- 


TYPETERM JUNIOR mit AX-10 - unser EPROM sofort einsteckfertig. 
PeSSNSSIS ODENneS GESpahn, EREHIARE © KOMPAKT + FLACH — Durch Einsatz von „SIEMENS“ Flachtasten- 


steckfertig. Mit TYPETERM JUNIOR kann modulen 


die AX-10 mehr. Sie wird zum vollwertigen 

Typenraddrucker für Ihren Apple: 

@ 3 verschiedene Schriftstärken 
gesellschaft für 
compuftersteverungen 
und datentechnik mbh 


@ Automatisches Unterstreichen 

@ 2 Zeichensätze z.B. deutsch u. ASCII 
D-4930 Detmold # Alter Mühlenweg 5 
Telefon O0 52 31/41 76 & Telex 935 660 acs d 


Semian presents... 


@ 2k ROM auf der Karte für Ausgabe unter 
Cirtech Produkte für Apple Il 


DOS, PRODOS, CP/M u. PASCAL. 
e CP/M Plus System für Apple //c 


TYPETERM - ein starkes Interface für 
starke Maschinen! Alle Cursor- und Ctl- 
Befehle. 4k ROM auf der Karte für DOS, 
PRODOS, CP/M, PASCAL. 2 Zeichensätze 
verfügbar z. B. deutsch u. ASCIl. Alle 
Features: Hoch-/Tiefstellen, autom. Unter- 
streichen, var. Zeichen und Zeilenabst., 
autom. Papierzuführung usw. Ausführl. 
Handbuch vorab: 10,— DM auf Konto 
14770-306 PGiroA Han (Anrechnung). 


TYPETERM - ein Produkt von 


eo 
imerknrm Kock & Mreches GmbH 


Postf., 3004 Isernhagen 4 
electronic Telefon 05139-87393 





TYPETERM JUNIOR - ein Produkt von 


= 
interkom re & Mreches GmbH 


- ostf., 3004 Isernhagen 4 
electronic Telefon 05139-87393 








Achtung! Zusatzprogramm für AppleWNorks 


DIESE ANZEIGE 


wurde vollständig mit AppleWorks gedruckt. Dazu 
benötigen Sie rur rıcch den DMP Charger, der 
außerdem noch 20 weitere Zeichensätze für Sie 
bereit hält. 


Larıtnıs, /ts/ic, Schmasch, 
ABHEPTHLKIMIT, OTEPNEXYZ 


ATHENS VORDER /EIT 


Auch vom MNordStar und anderen Programmen 
können diese Zeichen benutzt werden. Sie Können 
die Zeichen verändern, oder auch neue gestalten. 
Das Programm arbeitet mit dem & //e (123K) oder 
# //c und mit dem & lmagewriter, auch FX 50, 
Panasonic, OKidata. 

Preis: 19%,- incl. MwSt. und ausführlichem 
Handbuch. Infoblatt kostenlos. Versand gegen 
offerıe Rechnung möglich 


Schreib, 


Huımnmzeti og 


rIorber t 
Nottulner Landweg &1 
D-44009 Münster 
Tel.: 02534/ 7036 Telex: &72 496 


auch bei Pandasoft und Intus erhältlich. 


Peeker 1/86 





CP/M Plus System mit Betriebssystem, Z80H (8MHz), 128K RAM, Maus- 
Funktion, Drucker-Spooler mit 12K RAM, Tastatur-Spooler, Bildschirm 
Dump zu jederzeit, Kompatibel zu CP/M 2.2 u. 2.23. Einsatz aller CP/M 
Sprachen und Programme (MBASIC, WORDSTAR etc.). 

K10 Apple //c CP/M Plus System Modul DM 998,00 
K11 Apple //c CP/M Plus System Modul und WORDSTAR/ 
MAILMERGE DM 1498,00 


e Champion Drucker Karte 


Parallele Text- u. Graphik-Druckerkarte, 16 0. 64K RAM Puffer, 40/80 Z. 
Dump, Einsatz von DOS, PRODOS, PASCAL, CP/M und auch Apple- 
works, volle Apple //e Graphik, Serieller Ausbau möglich. 
K32 Apple //+,e Champion Interface 16K RAM DM 459,00 


DM 599,00 


K33 Apple //+,e Champion Interface 64K RAM 


e 80 Zeichen Karte mit 64K RAM 


80-Zeichen Karte mit 64K RAM, voll Apple //e Graphik fähig. 


K51 Apple //e 80-Zeichen Karte mit 64K RAM 


e 1Megabyte RAM Karte 


100 % Kompatibel mit PRODOS (Appleworks), DOS, PASCAL 1.3 und 
CIRTECH CP/M Plus System, max. 6 Megabyte pro Apple //+,e, Einsatz 
als RAM-Disk in jedem Slot möglich. 

K70 Apple //+,e Flipper Karte mit 1MB RAM. 


Händleranfragen willkommen! 


M.Semjan 
Computer Systeme 


Postfach 90 01 64 : 6000 Frankfurt/M 90 
Tel. 069-70 18 53 - Mo-Fr 10.30-15 Uhr 


DM 359,00 


DM 1798,00 








Quicksort 





Eine superschnelle Applesoft-Erweiterung 


von Harald Grumser 


In vielen Anwendungen taucht das Pro- 
blem auf, Daten beliebiger Art zu sortie- 
ren. Bei geringerem Umfang der 
Datenmenge bietet sich ein Applesoft- 
Programm an, wie es in dem Artikel „Wie 
funktioniert Quicksort?“ in diesem Heft 
beschrieben wird (die Lektüre dieses Bei- 
trags wird hier vorausgesetzt). Diese Vor- 
gehensweise erfordert jedoch die Anpas- 
sung des Programms an den jeweiligen 
Datentyp und benötigt bei einer großen 
Zahl von Array-Elementen trotz des intelli- 
genten Sortieralgorithmus eine beträchtli- 
che Zeit. Abhilfe schafft hier der Übergang 
zu einem Assemblerprogramm, das dar- 
über hinaus alle drei Datentypen von Ap- 
plesoft (Real-Zahlen, Integer-Zahlen und 
Strings) unterstützt. So ist es möglich, 
1000 Real-Zahlen in einer Zeit von unter 3 
Sekunden zu sortieren. Außerdem wird 
bei Strings eine Sortierung nach Duden 
vorgenommen. 

Das Programm QUICKSORT wird als Am- 
persand-Utility in das eigene Applesoft- 
Programm eingebunden, nachdem es 
durch 

BRUN QUICKSORT 

(unter DOS 3.3, nicht unter ProDOS!) in- 
stalliert wurde. Dieser Aufruf sollte stets 
am Programmanfang erfolgen, da HIMEM 
verändert wird. Der Sortiervorgang wird 
dann eingeleitet durch den Befehl „&Ar- 
ray“, wobei Array das zu sortierende Feld 
bezeichnet, also z.B. XWERT, PUNKTE% 
oder NAME$ (siehe QUICKSORT- 
.‚DEMO). 


1. Die Grundlagen 


Bei der Programmierung eines umfang- 
reicheren Programms erweist es sich als 
vorteilhaft, zunächst einige Teilaspekte zu 
untersuchen, um dann das ganze Problem 
in Angriff zu nehmen (sog. Bottom-Up- 
Programmierung). Dieser Weg soll auch 
bei der Erläuterung dieses Programms be- 
schritten werden. 


16 


Aufbau von Array-Variablen 


Array-Variablen (auch indizierte oder Feld- 
Variablen genannt) werden wie alle Varia- 
blen hinter dem Applesoft-Programm ab- 
gelegt. Während einfache Variablen stets 7 
Bytes einnehmen, hängt der Umfang ei- 
nes Feldes von drei Faktoren ab. Zunächst 
kann ein Array bis zu 255 Dimensionen 
umfassen, wobei jede Dimension wieder- 
um aus bis zu (theoretisch) 65535 Ele- 
menten bestehen kann. Die Größe eines 
Elements hängt dann von dem Datentyp 
ab: 


— Integer-Zahlen belegen je zwei Bytes im 
Speicher, die die Zahl (im Bereich -32767 
bis 32767) repräsentieren. 

— String-Variablen belegen je drei Bytes. 
Das erste Byte gibt die String-Länge wie- 
der, während die beiden nächsten Bytes 
auf die eigentliche Zeichenkette, die sich 
im String-Pool unterhalb von HIMEM oder 
im Applesoft-Programm selbst befindet, 
verweisen. 

— Real-Zahlen werden durch fünf Bytes 
gespeichert, ein Byte Exponent und vier 
Bytes Mantisse. 


Jedes Feld wird durch einen Vorspann 
(Header) gekennzeichnet. Die ersten bei- 
den Bytes geben Auskunft über den Na- 
men, wobei die beiden Bit 7 den Varia- 
blentyp bestimmen. Danach folgt ein 
Zwei-Byte-Offset, der auf das nächste 
Feld verweist. Das nächste Byte gibt die 
Anzahl der Dimensionen wieder, woran 
sich für jede Dimension je zwei Bytes an- 
schließen, die die Anzahl der Elemente 
pro Dimension beinhalten. Erst dann fol- 
gen die einzelnen Elemente des Arrays 
(weiter Informationen hierzu sind der Ap- 
plesoft BASIC Programmieranleitung, An- 
hang | zu entnehmen). 

Da das Programm nur eindimensionale 
Felder unterstützt, entfällt die umständli- 
che Berechnung der Speicherabbildungs- 





funktion (diese Funktion weist jeder Ele- 
ment-Koordinate des n-dimensionalen 
Feldes eine lineare Speicheradresse zu). 


Die Auswertung des Arrays 


Beim Einsprung in die Quicksort-Routine 
steht der Programmzeiger (Textpointer) 
auf dem ersten Zeichen des Array-Na- 
mens. Der Applesoft-Interpreter enthält ei- 
ne Routine, die diesen Namen auswertet 
und einen Zeiger auf den Beginn des an- 
gegebenen Feldes richtet. Diese Routine 
namens PTRGET kann durch das Sog. 
SUBFLAG gesteuert werden, um z.B. zu 
verhindern, daß das Feld neu angelegt 
wird. Nach der Bestimmung der Speicher- 
adresse des Arrays muß zunächst der 
Datentyp bzw. die Länge eines Elements 
mit Hilfe der Speicherstellen VALTYP und 
INTFLAG ermittelt werden, da bei der 
späteren Bearbeitung stets die Länge be- 
rücksichtigt werden muß. 

Danach erfolgt eine Überprüfung der Di- 
mension, um gegebenenfalls via BSSERR 
die Meldung „BAD SUBSCRIPT ERROR" 
auszugeben, falls es sich um ein mehrdi- 
mensionales Feld handelt. 

Mit der sich daran anschließenden Be- 
rechnung der Feldlänge wird der Anfangs- 
und Endwert (START und END) gesetzt 
und somit das Intervall für den ersten Re- 
kursionsschritt festgelegt. 


Vergleich zweier Elemente 


Ein wesentlicher Bestandteil des Sortie- 
rens besteht im Vergleich zweier Elemen- 
te. Hierzu wird ein Element in den Fließ- 
komma-Akkumulator FAC übertragen, im 
Fall von FP-Variablen durch die ROM-Rou- 
tine MOVFM und ansonsten durch einen 
eigenen Programmteil. Es bietet sich an, 
das mittlere Element des Intervalls, das 
während eines ganzen Rekursionsschrit- 
tes als Grundlage aller Vergleiche dient, 
dort abzulegen. 


Peeker 1/86 





Der Vergeich muß abhängig vom 
Datentyp erfolgen. Real-Zahlen können 
durch FCOMP (Einsprung bei FCOMP1) 
verglichen werden, während bei Integer- 
Zahlen eine eigene Routine die Verarbei- 
tung beschleunigt, da der Interpreter eine 
Typumwandlung in Real-Zahlen vorneh- 
men würde, was unnötige Zeit kostet. Der 
Vergleich wird durch das Vorzeichen-Bit 
(Bit 15) erschwert, da bei negativen Zah- 
len die Logik umgekehrt werden muß und 
bei Zahlen mit unterschiedlichen Vorzei- 
chen nur das Vorzeichen als Kriterium her- 
angezogen werden darf. 

Bei String-Variablen kann ebenfalls nicht 
auf eine Interpreter-Routine zurückgegrif- 
fen werden, da der Vergleich der einzel- 
nen ASCIl-Werte keine Sortierung nach 
Duden ergeben würde. 


Duden-Normierung 


Die Duden-Normierung sieht folgende Ab- 
weichungen gegenüber dem Applesoft- 
Vergleich von Strings vor: 

— Groß- und Kleinbuchstaben sind äquiva- 
lent. 

— Zahlen und Sonderzeichen haben kei- 
nen Sortierwert. 

— Umlaute (ä, ö, ü) werden wie die ent- 
sprechenden Selbstlaute (a, 0, u) behan- 
delt. 

Die Sonderstellung des Eszett wird hier 
nicht berücksichtigt, so daß das „B“ nach 
„zZ“ eingeordnet wird. 

Die Routine, die diese Anpassung vor- 
nimmt, wird für beide zu vergleichenden 
Strings benutzt. Ein kleiner Trick erspart 
hier einige Zyklen an Rechenzeit. Statt 
eines Aufrufs als Unterprogramm wird der 
Programmablauf durch das V-Flag ge- 
steuert. 


Die Verwaltung der Elemente 


Grundsätzlich bestehen zwei Möglichkei- 
ten, den Zugriff auf die einzelnen Elemen- 
te zu gestalten: 

— Es wird der jeweilige Index verwaltet und 
vor einem Zugriff auf ein Feldelement die- 
ser Index mit der Länge eines Elements 
multipliziert und die Anfangsadresse des 
Arrays addiert, um zu der entsprechenden 
Speicherposition zu gelangen. Diese Ver- 
waltung erweist sich als sehr einfach bei 
der Bestimmung des mittleren Elements, 
kostet jedoch viel Zeit. 

— Die einzelnen Elemente werden direkt 
über ihre Speicherposition verwaltet, wo- 
durch sich der Zugriff sehr vereinfacht. 
Diese Möglichkeit bereitet jedoch Schwie- 
rigkeiten bei der Bestimmung des mittle- 
ren Elements, da eine Halbierung des In- 
tervalls bei ungeradzahliger Anzahl von 
Elementen einen Zeiger auf die Mitte ei- 
nes Eintrags erzeugen würde. Daher muß 
in diesem Fall ein Element von der Inter- 


Peeker 1/86 





vallänge subtrahiert werden, was bei der 
Bestimmung MIDDLE = (START + END) / 
2 einer Abrundung entspricht. Die Festle- 
gung, ob es sich um eine gerade oder 
ungerade Anzahl von Elementen handelt, 
ist nicht ganz einfach, da sie nur über den 
START- und END-Wert in Abhängigkeit 
von der Elementlänge (2, 3 oder 5 Bytes) 
erfolgen kann. Die Lösung sieht dement- 
sprechend kompliziert aus: Sind START- 
und END-Wert beide gerade oder ungera- 
de (zu erkennen am gleichen Bit 0), muß 
bei ungerader Elementlänge (3 oder 5 
Bytes) eine Anpassung erfolgen. Sind 
START- und END-Wert beide in der zwei- 
ten Stelle gerade oder ungerade (zu er- 
kennen am gleichen Bit 1), muß bei gera- 
der Elementlänge (2 Bytes) eine Anpas- 
sung erfolgen. 

Der zweiten Möglichkeit wurde wegen ih- 
rer kürzeren Ausführungszeit der Vorzug 
gegeben. 


2. Die Programmausführung 


Das Verständnis des Quicksort-Algorith- 
mus wird für die weiteren Ausführungen 
vorausgesetzt. 

Die Vorgehensweise des Assemblerpro- 
gramms unterscheidet sich nur in wenigen 
Punken von dem Applesoft-Programm des 
0.9. Artikels. 

Erst- und Letzttausch entfallen wie auch 
die dazu analoge Einrichtung eines Senti- 
nels am Ende des Feldes, da dies zu einer 
Überschreibung des eventuell nächsten 
Arrays führen würde. 

Die Bildung der Intervalle gestaltet sich 
ebenfalls etwas anders. Am Ende eines 
Rekursionsschrittes werden linker und 
rechter Zeiger vertauscht, um sicherzu- 
stellen, daß sich die Intervallgrenzen nicht 
überschneiden. Der eventuelle Austausch 
zweier gleicher Zeiger wird dabei in Kauf 
genommen. 

Somit kann jedoch nicht mehr durch die 
Überschneidung der Zeiger das Ende ei- 
nes Rekursionszweiges erkannt werden. 
Als Kriterium zum Abbruch des Intervalls 
wird daher die Intervallänge herangezo- 
gen. Falls weniger als drei Elemente vor- 
liegen (d.h. erstes und mittleres Element 
sind wegen der Abrundung beim Halbie- 
ren gleich), wird dieser Ast beendet und 
ein neues Intervall vom Stack geholt. 

Die gravierendste Unterscheidung liegt in 
der Bestimmung des auf den Stack zu 
schiebenden Intervalls. Wird stets das 
kleinere Intervall auf den Stack gescho- 
ben, ist sichergestellt, daß der Stack nicht 
überlaufen kann, da im ungünstigsten Fall 
das Intervall halbiert wird. Es hat sich zeit- 
lich jedoch als günstiger erwiesen, diese 
Unterscheidung nicht zu machen, sondern 
stets dieselbe Intervallhälfte (hier die rech- 








UTILITIES 4 


te) zu speichern. Dadurch ist jedoch die 
Anzahl der notwendigen Stackelemente 
nicht mehr begrenzbar, wodurch ein Über- 
lauf eintreten kann. Dieser Spezialfall wird 
dadurch abzufangen, daß der komplette 
Sortiervorgang nochmals von vorne ge- 
startet wird. 


Abgesehen von diesen Unterschieden 
kann der Ablauf des Programms analog 
aus dem Applesoft-Programm übertragen 
werden. 


Kurzhinweise 


1. Zweck: 

Ampersand-Utility zur Sortierung eines 
eindimensionalen Arrays nach dem 
Quicksort-Algorithmus. 

2. Konfiguration: 

II+, Ile oder IIc; 

DOS 3.3 

(kein ProDOS wegen HIMEM-Änderung) 
3. Test: 

RUN QUICKSORT.DEMO 

4. Sammeldisk: 

QUICKSORT.DEMO 
(Applesoft-Demo-Programm) 
T.QUICKSORT 

(Big-Mac-Quelltext) 

QUICKSORT 

(Maschinenprogramm) 


Ältere Peeker-Hefte 


können für DM 6,50 pro Heft 
zuzüglich Versandspesen ange- 
fordert werden. Vergriffene 
Hefte sind als Photokopien 

für DM 10,- pro Heft erhält- 
lich. 


Dr. A. Hüthig Verlag - Heidelberg 


17 





QUICKSORT 


BSAVE QUICKSORT, A37907, L493 


l 
2 
6) 
ie 
5 
6 
7 
8 
9 


9413: 
9415: 
9417: 
94AlA: 
941D: 
94lF: 
9421: 
9423: 
9425: 


9426: 
9428: 
9ARA: 
942D: 
9AZF: 
9431: 
9433: 
9434: 
9436: 
9438: 
94A3A: 


945C: 
943E: 
9449: 
9442: 
9444: 
9447: 
9449: 
944B: 
944D: 
9AAF: 
9451: 
9453: 
9455: 
9457: 
9459: 
945B: 
945C: 
945D: 
94A5F: 
9461: 
9463: 


18 


A9 94 
AB 26 
8D F7 
8C F6 
85 74 
84 73 


84 6F 


AD 94 


ES EC 
85 98 
BO 91 





03 
03 


DF 


El 


-——— 1... 0... 
* 
” Ampersand-Utility Quicksort . 
* 
” Harald Grumser, 1985 . 
Me * 

ORG $9413 ‚37907 
START EQU $9 ‚Intervallstart 
LFTPTR EQU $2 ;linker Zeiger 
MIDDLE EQU $4 ;‚Intervallmitte 
RGHTPTR EQU $6 ‚rechter Zeiger 
END EQU $8 ;‚Intervallende 
VALTYP EQU $11l ;$FF = String 
INTFLAG EQU $12 ;$80 = Integer 
SUBFLAG EQU $14 ;Integer/DIM-Flag 
YSAV EQU $34 ;‚l. String-Index 
YSAVl EQU $35 ;2. String-Index 
DEST EQU $69 ‚allg. Zeiger 
RESULT EQU $62 ;temp. Deskriptor 
CHAR EQU $65 ;Vergleichszeichen 
FRETOP EQU $6F ;Ende der Strings 
MEMSIZE EQU $73 ;‚HIMEM 
FAC EQU $9D ;Fließkomma-Akku 
LOWTR EQU $9B ;‚Arraypointer 
SP EQU $EB ‚"Stackpointer" 
LENGHT EQU $EC ;‚Variablenlänge 
IN EQU $209 ;Hilf-Stack 
AMPER EQU $3F5 ;&-Vektor 
PTRGET EQU $DFE3 ‚Var. auswerten 
BSSERR EQU $E196 ;"BAD SUBSCRIPT'" 
MOVFM EQU $EAFY9 ;(A,Y) -> FAC 
FCOMP1 EQU $EBB6 ;(A,Y)/FAC vergl. 
* Initialisierung 
#-————— — 1.0... ....4 
INIT LDA #>SORT 

LDY #<SORT 

STA AMPER+2 ‚Ampersand, 

STY AMPER+1 

STA MEMSIZE+l ; HIMEM, 

STY MEMSIZE 

STA FRETOP+1 ; und FRETOP 

STY FRETOP ;‚ initialisieren 

RTS 
* Hauptprogramm 
#-————— 1... 4 


* Array bestimmen und initialisieren 


SORT 


NOINT 


NOSTR 


DIMOK 


LDA 
STA 
JSR 
LDA 
BIT 
BPL 
LSR 
BIT 
BEQ 
LDA 
STA 


LDY 
LDA 
CMP 
BEQ 
JMP 
LDA 
ADC 
STA 
LDA 
ADC 
STA 
LDX 
LDY 
LDA 
ADC 
PHP 
SEC 
SBC 
STA 
BCS 
DEX 


+701000000 ;Flag für Array- 
SUBFLAG ; Suche (V-Flag) 
PTRGET ‚Array auswerten 
#5 ;‚Variablenlänge 
INTFLAG ; bestimmen: 
NOINT 

; 2 = Integer 
VALTYP ; 3 = String 
NOSTR ; 5 = Real 
#3 
LENGHT 
+04 ‚Zeiger auf DIM-Zahl 
(LOWTR),Y 
#1 ‚nur eindimensionale 
DIMOK ; Felder zulässig 
BSSERR ‚"BAD SUBSCRIPT" 
LOWTR 
#7-1 ;‚Schleifenkopf 
START ‚addieren 
LOWTR+1 
+9 
START+1 
LOWTR+1 
+$02 ;Feld-Offset 
(LOWTR),Y 
LOWTR ;Low-Byte 

;‚Carry der Addition 
LENGHT ‚Länge des letzten 
END ; Elements 
SP1 ;‚ subtrahieren 


9464: 
9465: 
9466: 
9467: 
9469: 
946B: 
946D: 
946F: 


9471: 
9473: 
9475: 


9476: 
9479: 
9ATB: 
9ATE: 
9489: 
9483: 
9485: 
9488: 
9ABA: 
948B: 
948D: 


9A8F: 
9491: 
9493: 
9495: 
9497: 
9499: 
949B: 
949D: 
949F: 
94APß: 
YAA2: 
94A3: 
94A5: 
94AAT: 
9449: 
94AB: 
94AAD: 
9AAF: 
94Bl: 
94B3: 
94B4: 
94B5: 
94B6: 
94B8: 
94ABA: 
94BB: 
94ABC: 
94BD: 
9ABE: 
9Aac9: 
94C1: 
9403: 
9404: 
94C5: 


9407: 
94C9: 
94ACB: 
94ACD: 
9ACF: 
94D2: 
94D3: 
94D5: 
94D7: 
94D9: 
94DB: 
94DD: 
9ADF: 
94E2: 


94E5: 
94ET: 
94E9: 
94EB: 
94ED: 
9AEF: 
94F]: 
94F3: 
94F6: 


9B 
#9 
99 
EB 
1E 


EB 
Q1 


FC 91 
FD 1 
FE @1 


FF @1 


n8 
#9 
D6 
07 
0 
Bl 
02 
93 


08 


09 
#8 
12 
D4 
#2 


Bl 
DA 


EC 
Bl 


99 
05 


04 


12 
BC 
02 


9D 99 


F9 EA 
EF 94 


02 


02 
02 
93 
92 
03 
6F 95 
05 


199 
101 
192 
103 
194 
195 
196 
107 
198 
199 
11® 
1ll 
112 
113 
114 
115 
116 
117 
118 
119 
12 
121 
122 
123 
124 
125 
126 
127 
128 
129 
139 
131 
132 
133 
134 
135 
136 
137 
138 
139 
14 
141 
142 
143 
144 
145 
146 
147 
148 
149 
15® 
151 
152 
153 
154 
155 
156 
157 
158 
159 
169 
161 
162 
163 
164 
165 
166 
167 
168 
169 
179 
171 
172 
173 
174 
175 
176 
177 
178 
179 
189 


SP1 PLP ‚Carry aus Addition 
INY 
TXA ‚High-Byte 
ADC (LOWTR),Y 
STA END+1l 
LDA +#$9® ‚Stack 
STA SP ;‚ initialisieren 
BEQ SUBSORT ‚unbedingt 


* Neues Intervall vom Stack, falls möglich 


SORTSUB LDX SP ‚Stackpointer 
BNE NOEND ;falls Null, 
RTS ‚ENDE 
NOEND LDA IN-4,X ‚neuer 
STA START ;‚ Startwert 
LDA IN-3,X 
STA START+1 
LDA IN-2,X ‚neuer 
STA END ; Endwert 
LDA IN-1l,X 
STA END+1 
TXA 
SBC #4 ;Pointer 
STA SP ; erniedrigen 


* Zeiger für neues Intervall setzen 


SUBSORT LDA END ‚rechten 
LDX END+1 ;‚ Zeiger 
STA RGHTPTR ;‚ initialisieren 
STX RGHTPTR+1 
LDA START ‚linken 
LDX START+1 ‚ Zeiger 
STA LFTPTR ;‚ initialisieren 
STX LFTPTR+1 
CLC ;MIDDLE = 
ADC END ;(START + END) / 2 
TAY ;bei ungeradzahl. 
LDA START ; Elementen muß 
EOR END ‚ angepaßt werden 
BIT INTFLAG ‚Integer? 
BPL ADJ ‚nein, dann weiter 
AND +%00000019 
BNE ADJ1 ‚ungeradzahlig 
ADJ AND #7%00000001 
BEQ NOADJ ‚geradzahlig 
ADJ1 PHP 
SEC ‚ein Element 
TYA ; abziehen, um 
SBC LENGHT ;‚ geradzahlig 
BCS SP2 ; vorzutäuschen 
DEX 
SP2 PLP 
TAY 
NOADJ TXA 
ADC END+1 ‚addieren 
ROR ; und durch 2 
STA MIDDLE+1 ‚ dividieren 
TYA ;‚ ergibt 
ROR ;‚ mittleres 
STA MIDDLE ; Element 


* Mittleren Wert nach FAC übertragen 


LDA INTFLAG ‚Integer? 

BPL_ FPSTR ‚nein, dann weiter 
MOVXM LDY #2 ‚2 oder 3 Bytes 
MOVLOOP LDA (MIDDLE),Y ; für Integer 


STA FAC,Y ‚ oder Strings 
DEY ; übertragen 
BPL MOVLOOP 
BMI CMPLEFT ‚unbedingt 

FPSTR LDA VALTYP ‚String? 
BMI MOVXM ‚ja, dann weiter 
LDA MIDDLE ‚ansonsten 
LDY MIDDLE+1 ; mittels 
JSR MOVFM ; ROM-Routine 


JMP CMPLEFT 


* Linken Zeiger erhöhen 


INCLEFT LDA LFTPTR ;linken 
ADC LENGHT ;‚ Zeiger um 
STA LFTPTR ; Elementlänge 
BCC CMPLEFT ;‚ erhöhen 
INC LFTPTR+1 
CMPLEFT LDA LFTPTR ;(A,Y) > 
LDY LFTPTR+1 ; MIDDLE? 
JSR COMPARE 
BCS CMPRGHT ‚ja, dann weiter 


Peeker 1/86 


ee ——————————————EEG 





94AFB8: 


94AFA: 
94AFD: 
YAFF: 
9501: 
9594: 
9596: 


9508: 
95PA: 
950C: 
95BE: 
9519: 
9512: 
9514: 
9515: 
9517: 
9518: 
951A: 
951C: 
951D: 
951F: 
9529: 
9522: 
9523: 
9526: 
9527: 


9529: 
952B: 
952D: 
952F: 
9531: 
9533: 
9535: 


9538: 
953A: 
953D: 
953E: 
9541: 
9544: 
9545: 
9548: 
9549: 


954B: 
954D: 
954F: 
9551: 
9554: 
9556: 
9559: 
955C: 
955D: 
955E: 
9569: 
9562: 
9564: 
9566: 
9568: 
956A: 
956C: 


956F: 
9571: 
9573: 
9575: 


9577: 
9579: 
957B: 
957D: 
957F: 
9581: 
9582: 
9584: 
9586: 


99 


20 


A4 
29 


Bd 


AS 
C5 
A5 
ES 


A4 
88 
Bl 
AA 
Bl 


8A 
91 
88 
19 
38 
29 
18 
9B 


85 
84 
A6 
19 


Peeker 1/86 


EB 


F5 
d6 
07 
6F 


F2 


02 
d6 
03 


17 
EC 


2 


d6 
02 


06 
F3 
F5 


BC 


99 
D4 
99 
1 
5 
93 
7 


ol 
d2 


06 
02 


d6 
EF 


EB 
FC 
93 
47 
BB 
06 
09 


D4 
FA 
EB 
02 
08 
3 
09 
8F 


69 
61 
12 
1A 


95 


95 


95 


94 


11) 


99 
u) 


11) 


94 


1) 
02 


94 


181 
182 
183 
184 
185 
186 
187 
188 
189 
199 
191 
192 
193 
194 
195 
196 
197 
198 
199 
209 
291 
202 
203 
204 
205 
206 
207 
208 
209 
219 
211 
212 
213 
214 
215 
216 
217 
218 
219 
220 
221 
222 
223 
224 
225 
226 
227 
228 
229 
239 
231 
232 
233 
234 
235 
236 
237 
238 
239 
249 
241 
242 
243 
244 
245 
246 
247 
248 
249 
259 
251 
252 
253 
254 
255 
256 
257 
258 
259 
269 
261 
262 
263 
264 
265 
266 
267 
268 
269 
270 
rl 
272 


BCC 


INCLEFT ;weiter erhöhen 


* Rechten Zeiger erniedrigen 


DECRGHT JSR 

CMPRGHT LDA 

LDY 

JSR 

BEQ 

BCS 
* Vertauschen, 
SWAP LDA 
CMP 
LDA 
SBC 
 BCS 
LDY 
DEY 
LDA 
TAX 
LDA 
STA 
TXA 
STA 
DEY 
BPL 
SEC 
JSR 
CLC 
BCC 


SWPLOOP 


DECRIGHT 

RGHTPTR ;(A,Y) <= 
RGHTPTR+1 ; MIDDLE? 
COMPARE 

SWAP ;ja, dann weiter 
DECRGHT ‚weiter erniedr. 


falls LFTPTR < RGHTPTR 


LFTPTR ‚linker Zeiger 
RGHTPTR ‚ größer 
LFTPTR+1 ;‚ oder gleich 
RGHTPTR+1l ; rechter Zeiger? 
NEXTSUB ‚ja, dann weiter 
LENGHT 

;2, 3 oder 5 
(LFTPTR),Y ; Bytes 

; austauschen 
(RGHTPTR),Y 
(LFTPTR),Y 
(RGHTPTR),Y 
SWPLOOP 

‚für Subtraktion 
DECRIGHT 

;für Addition 
INCLEFT ‚nächstes Paar 


* Intervall gegebenenfalls aufteilen 


NEXTSUB LDA START ‚Intervall- 

CMP MIDDLE ;‚ länge 

BNE NEXTSUBl ; 1 oder 2? 

LDA START+1 

CMP MIDDLE+1 

BNE NEXTSUBl ‚nein, dann weiter 

JMP SORTSUB ;REKURSTION 
NEXTSUBl LDY +#$01 ;linken und 
NSBLOOP LDA LFTPTR,Y ; rechten 

TAX ‚ Zeiger 

LDA RGHTPTR,Y ; austauschen 

STA_ LETPTR,Y ; (falls 

TXA . LFTPTR > 

STA RGHTPTR,Y ; RGHTPTR) 

DEY 

BPL NSBLOOP 

LDX SP ‚Stackpointer 

CPX #-4 ;Überlauf? 

BNE NOOVFL ‚nein, dann weiter 

JMP DIMOK ‚nochmal versuchen 
NOOVFL LDY #9 ‚Zähler 
PUSH LDA RGHTPTR,Y 

STA IN,X ‚rechten Zeiger 

INX ; und Intervall- 

INY ; ende retten 

CPY #4 

BNE PUSH 

STX SP ‚neuer Pointer 

LDA LFTPTR ‚linker 

STA END ;‚ Zeiger 

LDA LFTPTR+1 ;‚ ist neues 

STA END+1 ;‚ Intervallende 

JMP SUBSORT ;REKURSTION 
” Unterprogramme 
m ee 
* 2 Elemente vergleichen (mittleres und (A,Y) 
COMPARE STA DEST ‚Zeiger 

STY DEST+1 ;‚ eintragen 

LDX INTFLAG ‚Integer? 

BPL COMPFP ‚nein, dann weiter 


* Integer-Zahlen vergleichen 


COMPINT LDY 
LDA 
CMP 
BCC 
BNE 
INY 
LDA 
CMP 
BEQ 


+$99 ‚Int. vergleichen 
(DEST),Y 
FAC ‚Zahlen liegen 
CMPINTL1 
CMPINTI 

; im High/Low- 
(DEST),Y ; Format vor 
FAC+1 
RTNCPI 


en UTILITIES 





9588: 88 PA) DEY ‚wieder auf MSB 
9589: 6A 274 CMPINTl ROR ;C -> Bit 7 
958A: 51 69 275 EOR (DEST),Y ;Vorzeichen-Bit 
958C: 45 9D 276 EOR FAC ; berücksichtigen 
958E: 38 27T SEC ‚(löscht Z-Flag) 
958F: 2A 278 ROL ;Bit 7” ->C 
9590: 69 279 RTNCPI RTS 
280 
281 %* Real-Zahlen vergleichen 
282 
9591: A6 11 283 COMPFP LDX VALTYP ;Fließkomma-Zahl? 
9593: D® 94 284 BNE COMPSTR ;nein, dann weiter 
9595: 38 285 SEC ;(falls FAC = (A,Y)) 
9596: AC B6 EB 286 JMP FCOMP1 ;FP-Vergleich 
287 
288 x Strings vergleichen 
289 
9599: AB B2 298 COMPSTR LDY +#$92 ;‚Deskriptor 
959B: Bl 69 291 SETDESC LDA (DEST),Y ‚ als feste 
959D: 99 62 0B 292 STA RESULT,Y ; Adresse 
95Aß: 88 293 DEY ‚ ablegen 
95Al: 19 F8 294 BPL SETDESC 
95A3: 84 34 295 STY YSAV ;‚initialisieren 
95A5: 84 35 296 STY YSAVI 
95A7: AA 34 297 CSLOOP LDY YSAV ;l. String-Index 
95A9: 24 14 298 BIT SUBFLAG ‚V-Flag setzen 
95AB: C8 299 CMPMID INY ‚nächstes Zeichen 
95AC: CA 9D 300 CPY FAC ‚Länge 
95AE: F$ 3E 301 BEQ RTNCS ; erreicht 
95B®: Bl 9E 302 LDA (FAC+1),Y ;MIDDLE-Character 
95B2: 79 1® 303 BVS CHKCHR ‚unbedingt 
95B4: 90 F5 304 CMPMID1 BCC CMPMID ‚ohne Sort.-Wert 
95B6: 85 65 305 STA CHAR 
95B8: 84 34 306 STY YSAV 
95BA: AA 35 307 LDY YSAVl ‚2. String-Index 
95BC: B8 308 CLV ;V-Flag löschen 
95BD: C8 309  CMPAY INY ‚nächstes Zeichen 
95BE: CA 62 319 CPY RESULT ‚Länge 
95C9: FO 31 =11 BEQ RTNCS1 ; fertig 
95C2: Bl 63 312 LDA (RESULT+1),Y ;(A,Y)-Character 
313 
95C4: 29 7F 314 CHKCHR AND #%®1111111 ;ASCII normieren 
9506: C9 69 515 cCMPU #'a'-l ;Gemeine durch 
9508: 90 92 316 BCC VERSAL ; Versalien 
95CA: 29 DF 517 AND #%11®11111 ; ersetzen 
95CC: C9 41 318 VERSAL CMPU #'A' ‚alle anderen 
95CE: 90 13 319 BCC NOSVAL ; ohne Sort.-Wert 
95Dß: CY 5B 320 cCMP #'Ä' 
95D2: D® 92 521 BNE NOAE ;Umlaute 
95D4: A9 41 322 LDA #'A' ; durch 
95D6: C9Y 5C 323 NOAE CMP #'Ö' ; entsprechende 
95D8: DB 92 324 BNE NOOE ; Selbstlaute 
95DA: A9 AF 325 LDA #'0' ‚ ersetzen 
95DC: C9Y 5D 326 NOOE CMP #'Ü' 
95DE: DB 92 327 BNE NOUE 
95Eß: AY 55 328 LDA #'U' 
95E2: 38 329 NOUE SEC ‚mit Sort.-Wert 
95E3: 78 CF 330 NOSVAL BVS CMPMID1 ;‚V-Flag statt JSR 
331 
95E5: 99 D6 352 BCC CMPAY ‚ohne Sort.-Wert 
95E7: 84 35 3353 STY YSAVl 
95E9: C5 65 554 CMP CHAR ‚vergleichen 
95EB: F®ß BA 335 BEQ CSLOOP ‚gleich, -> weiter 
95ED: 6% 336 RTS 
95EE: A5 62 337 RTNCS LDA RESULT ‚Länge als 
95Fß: C5 9D 338 CMP FAC ; Kriterium 
95F2: 69 339 RTS 
95F3: 18 348 RTNCS1 CLC ;:(A,Y) < FAC 
95F4: 6® 341 RTS 
342 
343 % Rechten Zeiger erniedrigen 
344 
95F5: A5 B6 345 DECRIGHT LDA RGHTPTR ;durch 
95F7: ES EC 346 SBC LENGHT ; Subtraktion 
95F9: 85 96 347 STA RGHTPTR ; der 
95FB: B® 92 348 BCS RTNDR ; Element- 
95FD: C6 97 349 DEC RGHTPTR+1 ; länge 
95FF: 6% 350 RTNDR RTS 
493 Bytes 
QUICKSORT.DEMO 
18 PRINT CHR$ (4)"BRUN QUICKSORT" 
28 DIM A(999) 
38 FOR I = ß TO 999 
40 A(I) = RND (1) * 1999 
50 NEXT 
60 PRINT CHR$ (7): & A: PRINT CHR$ (7) p 
78 FOR I = ® TO 999 
80 PRINT A(I): NEXT = 


19 














Da der Mensch bekanntlich nicht einseitig 
denken und arbeiten soll, ist es für jeden 
Apple-Besitzer mindestens genauso wich- 
tig, sich neben den künstlichen Sprachen 
wie Pascal, BASIC, Assembler usw. auch 
in natürlichen Sprachen zu üben. Falls Sie 
eine Fremdsprache erlernen möchten, ge- 
hört das Üben der jeweiligen Vokabeln 
unausweichlich dazu. Nachfolgend wird 
ein Programm beschrieben, mit dessen 
Hilfe Sie beliebige Vokabeldateien erstel- 
len und abfragen können. 


f\2 
wn 


x \ / = 4: { 
> N 4 p 
r \ ) N X: 
\ FR 
= / 
x G u l R 
Nr EL 
4 ) 
N -— f \ 
\ 2 j ) 
A “ / Ir 
% EG N Bi i 
EN NT u 
us N 


20 


4 
2 + SR & 
A 
I Wr, =, N 
RL Ds ; A 
u 
x / 


w% 
en DE ER | 

N 7a 
LEE“ 





Vokabeltrainer 


Vokabeln lernen mit dem Apple Il 


Wegen des ungewöhnlich großen Um- 
fangs des Programms (allein das Ap- 
plesoft-Listing würde über 8 Seiten ein- 
nehmen) und weil ein Teil der Routinen 
bereits an anderer Stelle erschienen ist, ist 
das Programmpaket nebst einer ca. 1000 
Vokabeln umfassenden deutsch-engli- 
schen Grundwortschatz-Datei nur auf der 
Peeker-Sammeldiskette enthalten. 


von Thomas Zink 
















Peeker 1/86 








1. Allgemeines 


Voraussetzung für die Benutzung des Vo- 
kabeltrainerprogramms sind ein Minimal- 
Apple-Il oder ein Kompatibler (40 Z/Z oh- 
ne Kleinschreibung genügt) mit einem 
Laufwerk und einer Language-Card, die 
allerdings nur für das Kopierprogramm be- 
nötigt wird. Bei der Benutzung sollte die 
Taste Shift-Lock eingerastet sein. 

Das Programmpaket besteht aus zwei BA- 
SIC- und sechs Assemblerprogrammen. 


BASIC-Programme: 


a. VOK.TRAINER - Eigentliches Vokabel- 
programm mit 9 Hauptmenü-Optionen 
(S.U.). 

b. VOK.COPY - Kleineres BASIC-Pro- 
gramm (über Option 7), das das Kopieren 
von Disketten steuert. 


Assembler-Hilfsprogramme: 


a. CATALOG - Generiert den für die Op- 
tionen 1-6 benötigten speziellen Katalog- 
ausdruck. 

b. FREI-SEK - Berechnet die Anzahl der 
freien Sektoren auf der im Laufwerk be- 
findlichen Diskette. 

c. GETLINE - Das normale Applesoft- 
INPUT interpretiert die Sonderzeichen 
"und „:“ als Feldtrenner. GETLINE 
ermöglicht deren Eingabe von der Tastatur 
und einer Textdatei. 

d. DOS-LOS - Bereitet eine DOS-lose 
Datendiskette vor. Ferner wird ein Boot- 
Programm mit einer Meldung auf Track 0, 
Sektor O0 geschrieben, damit der Computer 
beim versehentlichen Booten nicht ab- 
stürzt; auch für 40-Spur-Disketten. 

e. RWTS - Dient für die Programme a, b 
und d als Read-Write-Track-Sector-Routi- 
ne, d.h. zum Lesen und Schreiben von 
beliebigen Sektoren der Diskette. 

f. BCOPY - (Objekt-Code: VOK.BCOPY) 
- 1-Drive Kopierprogramm; auch für 40- 
Spur-Disketten. 

Die Routinen FREI-SEK, DOS-LOS, 
RWTS und BCOPY stammen aus „Apple 
DOS 3.3“ von U. Stiehl, während die GET- 
LINE-Routine auf H. Grumser zurückgeht 
(Peeker, 5/85). 

Die Programme a-e sind unter dem Na- 
men VOK.PACK als Objektcode (von 
$8F60 bis $9465) zusammengefaßt. Das 
Kopierprogramm BCOPY wird als einzelne 
Datei ab $8000 abgelegt. Die Quellcode- 
Dateien der Maschinenprogramme befin- 
den sich aus Platzgründen nicht auf der 
Peeker-Sammeldisk. 


Einleitend ist vielleicht noch zu erwähnen, 
daß am Anfang des Vokabeltrainerpro- 
gramms der Reset-Vektor auf das Ap- 
plesoft-Kommando „RUN“ ($D655) ge- 
richtet wird, so daß beim Drücken der Re- 


Peeker 1/86 


set-Taste das Programm neu startet. Fer- 
ner sei darauf hingewiesen, daß alle BA- 
SIC- und Maschinenprogramme, so weit 
es geht, mit Fehlerabfangroutinen ausge- 
stattet sind, die auf eventuelle Eingabe- 
oder Diskettenzugriffsfehler (z.B. Input/ 
Output-Error usw.) mit entsprechenden 
Hinweisen reagieren, um danach das Pro- 
gramm an geeigneter Stelle wieder fortzu- 
setzen. 


2. Hauptmenü von VOK.TRAINER 


Kurz nach dem Programmstart mit 

RUN VOK.TRAINER 

erscheint ein Menü, von dem aus Sie 9 
Teilprogramme oder Menü-Optionen aus- 
wählen können: 


Vokabeln abfragen 
Vokabeln hinzufügen 
) Vokabeln berichtigen 
) Neue Datei eröffnen 
) Datei löschen 

) Datei umbenennen 

) 

) 

) 


(1) 
(2) 
(3 
(4 
| 
| 
| 


Disketten kopieren 
(8) Disketten formatieren 
(9) Quit (Ende) 


ö 
6 
7 
8 


Während sich die ersten drei Optionen (1- 
3) auf das Abfragen, Hinzufügen und Be- 
richtigen von Vokabeln beziehen, ermögli- 
chen Ihnen die nächsten drei Optionen (4- 
6) das Eröffnen, Löschen und Umbenen- 
nen von Vokabeldateien. Die nächsten 
beiden (7-8) schließlich gestatten die Ma- 
nipulation von Disketten, genauer gesagt 
das Kopieren und Formatieren. Und über 
Option 9 kann man schließlich das Pro- 
gramm beenden. Danach ist der Reset- 
Vektor wieder normalisiert. 


Die Beantwortung der einzelnen Unterop- 
tionen in den Teilprogrammen erfolgt über 
die Tastatur. Die erlaubten Tasten sind 
meistens am Ende des Textes angegeben. 
Generell ist anzumerken, daß Sie mit 
W(unsch) 

fast immer zum Hauptmenü zurückgelan- 
gen. Von dort aus eröffnet Ihnen die Taste 
ESC die Einsicht in eine siebenseitige Zu- 
sammenstellung der wichtigsten Tasten- 
belegungen in den einzelnen Teilpro- 
grammen. 

Bei den Optionen 1-6 werden Sie zu- 
nächst aufgefordert, den Namen der zu 
bearbeitenden Vokabeldatei einzugeben. 
In der Mitte des Bildschirms wird ein In- 
haltsverzeichnis der bereits vorhandenen 
Vokabeldateien aufgelistet und darunter 
die Anzahl der noch freien Sektoren auf 
der Diskette angezeigt. Überschreitet die 
Zahl der Dateien 18, so können Sie mit der 
Leertaste weitere auf der Diskette enthal- 
tene Dateien ausdrucken lassen oder mit 
Return den weiteren Ausdruck verhindern. 





4 schule 44 


3. Die VOK.TRAINER-Optionen 


Die Beschreibung der 8 Hauptmenu-Op- 
tionen entspricht nicht dem Bildschirm- 
Menü, sondern der Reihenfolge der Anla- 
ge einer neuen Datei. 


Option 8: 
Disketten formatieren 


Bevor der Computer Daten auf eine Dis- 
kette speichern kann, muß sie bekanntlich 
formatiert bzw. initialisiert werden. Über 
Option 8 wird die Diskette nicht wie sonst 
üblich mit 35 Tracks, sondern mit 40 
Tracks (entspricht 20K mehr Speicher- 
platz) initialisiert (Patch von - Wolfgang 
Schöpe aus mc-Apple-Sonderheft, S. 23). 
Für diejenigen, die ein Laufwerk besitzen, 
welches nicht in der Lage ist, den Schreib/ 
Lesekopf über die Breite von 40 Tracks zu 
bewegen, kann auch mit 35 Tracks forma- 
tiert werden. Zur Gewinnung von weite- 
rem Speicherraum wird ferner eine DOS- 
\ose Datendiskette vorbereitet (entspricht 
8K mehr Speicherplatz). Insgesamt sum- 
miert sich die verfügbare Speicherkapazi- 
tät der Diskette auf 124K (normal) + 20K 
+ 8K = 152K. 


Option 4: 
Neue Datei eröffnen 


Nach der Formatierung der Datendiskette 
können Vokabeldateien eingerichtet wer- 
den (Option 4). Zunächst geben Sie dazu 
der zukünftigen Datei einen Namen und 
legen nachfolgend die Sprache fest, in der 
Sie Vokabeln eingeben und abfragen 
möchten. Jede so von Ihnen eingerichtete 
Vokabeldatei wird im Inhaltsverzeichnis 
aufgelistet und repräsentiert auf der Dis- 
kette zwei einzelne Files, einen Binärfile 
„Name.INFO“ (enthält Informationen über 
Vokabelanzahl und Fehlerstufen, s.u.) und 
einen Textfile „Name.VOK“ (enthält die 
Vokabeln). 


Optionen 5 und 6: 
Datei löschen und umbenennen 


Zur einfacheren Handhabung der Vokabel- 
dateien ermöglichen die Optionen 5 und 6 
das gemeinsame Löschen und Umbenen- 
nen der Dateien „Name.INFO“ und „Na- 
me.VOK“. 


Option 2: 
Vokabeln hinzufügen 


Das Abfragen der Vokabeln ergibt natür- 
lich erst dann einen Sinn, wenn Sie zuvor 
die abzufragenden Vokabeln eingegeben 
haben. Die Option 2 bietet hierzu die Mög- 
lichkeit. Es erscheint eine Bildschirmmas- 
ke auf dem Monitor, in der Sie links den 
Namen der zuvor gewählten Datei und 


21 


Computerbucher 


diegehen, für Computer —— 
die kommen. Apple-Assembler 


Band 1: Einführung in die 

















Frank Bühler Assembler-Programmierung 
Applesoft BASIC 
Arne Schäpers 
Bewegte 
Apple-Grafik 
DOS Toolkit-Erweiterungen 


ProDOS-Analyse 


Versionen 1.0.1, 1.0.2, 1.1.1 


/ıps und 
IRRE, 





Jürgen Kehrel 


5) Hüthig 4 f Assembler lernen 
Band 1: Einführung in die 
Assembler-Programmierung 





Frank Bühler des 6502 

Applesoft Basic 1985, ca. 200 S., kart., 

Tips und Tricks DM 38,— 
Ameschägere 1985, 241 S., 40 Abb., kart., ISBN 3-7785-1151-3 

DM 38,— 


Bewegte Apple-Grafik 
1985, 305 S., 6 Abb., kart., 
DM 58,— 

ISBN 3-7785-1150-5 





ISBN 3-7785-1094-0 


Arne Schäpers 
ProDOS-Analyse 
Versionen 1.0.1, 1.0.2, 1.1.1 


1985, 470 S., kart., DM 68,— 
ISBN 3-7785-1134-3 


für Aufsteige 


Mit ausführlichen 
Ulrich Stiehl  Programmbeispielen 


für Aufsteiger 


.. „" 
»%u,+* 


RER EN Er 
mideYalg:Taglanle/sikTeltzilz1e 3 ips 
Ulrich Stiehl Tre 


2. Auflage 





Ulrich Stiehl 
ProDOS für Aufsteiger 
Band 2 
uren Sen ee 
ProDOS für Aufsteiger 
Band 1 


2., geänderte Auflage 1985, 
Ulrich Stiehl 208 S., kart., DM 28 — 
Apple DOS 3.3 ISBN 3-7785-1098-3 

Tips und Tricks 





Ulrich Stiehl 3., völlig überarbeitete 
Ausgabe erscheint 

Apple Assembler Anfang 1986 

1984, 200 S., 3 Abb., kart., 

DM 34,— 


ISBN 3-7785-1047-9 


Weitere Titel und Informationen finden Sie in unserem Computerbuch-Katalog: 


Dr. Alfred Hüthig Verlag, Postfach 1028 69, 6900 Heidelberg 1 





uchig 


22 Peeker 1/86 








“COMPUTER 


OPERATO 


Qualität un 


d Fortschritt, 


der sich bewährt hat! 


Als Dankeschön für Ihr Vertrauen und die 


große Nachfrage: 
OPERATOR Il 


jetzt nurnoch 


Leistungstabelle: 
Prozessor: 


Interface: 

Handshake wählbar: 
Kabel mit Stecker: 
Ausführliches Handbuch: 
Schaltplan: 

Gehäuse: 

Deutsches Erzeugnis: 
Hex-Eingabe: 
Eingabebuffer: 
Barcodeanschluß: 


Passwortprogrammierbar: 


Gewicht: 
Maße: 


Programmierbare Tasten: 


Programmierbare 
Ebenen tauschbar: 
Frei programmierbar: 


Kein Datenverlust 

nach Abschalten: 

Max. Speicherkapazität: 
Pro Taste: 
Vorprogrammierung: 
Autorepeat: 


Akustikgeber eingebaut: 


inkl. MwSt. 


6511 

(ähnl. 6502) 
paralleVseriell 
ja 

ja 

ja 

ja 
ergonomisch 
ja 

ja 

ja 

möglich 


ja 
1,9 kg 
47x19x3cm 
3x38 


alle 3 beliebig 
EEPROM 
(direkt über 
Tastaturein- 
gabe) 


ja 

1.6 kByte 
14 Byte 

2 Geschwin- 
digkeiten 

ja 


Lieferung per Nachnahme zzgl. Versandspesen. 
Ausführliches Info gegen Freiumschlag. 


AFC Computer GmbH 
Salmstr. 20 - 5000 Köln 91 
Tel. 02 21/83 80 00, Telex 8 873 254 afc 


INTUS-Lern- und 
Anwenderprogramme 
für Apple II - Computer 


e Rechtschreibtrainer 
für Deutsch 

e Rechtschreibtrainer 
für Englisch 

e Wortschatztrainer 
Englisch/Deutsch 
Französisch/Deutsch 


e Maschineschreiben 
wie der Blitz 


e Basic-Lernprogramm, 
sehr umfangreich 


e Kinderschule, Lernen 
für Vorschulkinder DM 59,- 


e AppleGraph, Erstellen von Kreis 
und Balken-Graphiken DM 125,- 


e Rechenmodelle für 
AppleWorks-Rechenblatt DM 195,- 


e PriBu-Privatbuchhaltung DM 195,- 


e und über 200 weitere Programme. 
Katalog gratis 

e Demo-Disketten 
mit 5-9 Teilprogrammen DM 10,- 


e 6000 Frei-Programme (fast) gratis 
Programm-Liste (Vorkasse) DM 10,- 


DM 125,- 
DM 9,- 


DM 98,- 
DM 98,- 


DM 188,- 


DM 295,- 


N 


INTUS SOFTWARE 


Kaiserstr. 21, 7890 Waldshut, 
Tel. 07751-7920 


HERDERSTR. 12 


640 KByte-Drives für den Apple //c!! 


@ 5'/4- od. 31/-Zoll-Format (Teac FD55/35-F) 

@ FD55-F umschaltbar auf 35/40 Track 

® Anschluß an die externe Laufwerkbuchse 

@ Durch Einbauplatine (kein Löten) 640 KByte im Direktzugriff 

® Einfache Anpassung für DOS 3.3, UCSD-Pascal und PRODOS 
durch menügeführten Patch 

® Anpassung von CP/M in Verbindung mit einer Z 80-Zusatzplatine 
in Vorbereitung 


® anschlußfertig im Gehäuse DM 1090,— 


Festplatten für Apple Il (//e) 


@ 5'/ Zoll-Format (Slimline) 

@ Booten direkt von der Festplatte in DOS 3.3, UCSD-Pascal, 
PRODOS und CP/M 2.2 / 3.0 

@ Gemischtbetr. mit 35/40/80/160 Track-Drives 

® Copy- und Install-Programme im Lieferumfang 

@ Umfangreiches Manual 

® z.B. 10 MB incl. Netzteil u. Contr., 


anschlußfertig an Ihren Apple DM 3380,— 


640 KByte-Drives für Apple Il (//e) 


@ 5'/- od. 31/-Zoll-Format (Teac FD55/35-F) 

@ FD55-F umschaltbar auf 40 Track (Apple kompatible) 

@ Installationssoftware für DOS 3.3, UCSD-Pascal, CP/M 2.2, 
CP/M 2.23 (60K), PRODOS, AP22, ALS CP/M+ 

® Umfangreiches Handbuch 

@ Anschlußfertige Auslieferung incl. Contr. und 2 Drives 

@ Diskstation 55ll (2 Teac FD55-F, 1.2 MB) DM 1350,— 

® Diskstation 3511 (2 Teac FD35-F, 1.2 MB) DM 1478,— 


80 Zeichen + 64 K für Apple //e 


@® und jetzt hinsetzen . . . . DM 138,— 


2000 HAMBURG 76 


ON 
I) 


DIE NEUE DIMENSION 


Das modulare 16/32-Bit Computer-System GEPARD 
e CPU MC 68000, 10 M Hz - CPU MC 68020, 16 M Hz 
e DRAM ab 512 K Byte 
e Über 30 versch. Steckkarten im Europaformat (100 x 160 mm) 


Anzeigenschluß 
für 


Ausgabe 3/86 
ist am 17. 


+ Kompatible 


Komp 48 
48 K. 6502 ohne Firmware 


Komp 64 


64 K, 6502, Z-80, 15er-Block 


e Modula-2 Compiler 

e Betriebssystem PARADIGE ug: 
e System Editor auch © und ! 
© CPIM®-68K —Irpmanllker 

e C-Compiler schnell® 


e „Einsteigersysteme“ für 
Apple Il und Commodore ab DM 2.598,- 


Informationsmaterial kostenlos: Tel.: 0441/74084 


computer GmbH + Co.KG, Westerstr. 10-12, 2900 Oldenburg 


rür Apple Il, Ile 


Z-80-Karte so. 80-Zeichen-Karte a 
mit Sorftswitch, neue 


Disknterfaceer  69- Vers. m. gest. scharf. Bild nn 
Centronics-Interf. m. Kabel 69- GeechKarte — 5- BI 
16-K-RAM-Karte 9- CoDchKarte— an 
Eprommer (4, 8, 16 K) 139,- Komp 28 797.- n 
128-K-RAM-Karte 279,- Apple 2E kompatible, Rechner 
256-KB-RAM-Karte uug,- 64 K im 2E-Design, ohne Firmware x N 
Wild-Karte og, 80Z +64K-Karte N 


ohne Firmware 840,- 


. Komp 64 S 940,- 
wie Komp 64, jedoch mit abgesetzter 
Tastatur mit 188 Funktionen. 


Motherboard 48 K 399,- 


8 Slots, alle IC’s gesockelt, 
ohne Firmware, fertig geprüft 


Motherboard 64 K 


wie oben, mit 6502 und 39,- Klaus Jeschke für 2E komnati 
Ü patible 
„2.80, 64 K Hark. Sofwäre (knackt geschützte Programme) 


| Viertstr. 3-13 Händleranfragen erwünscht! Appie-Info 1,- en (Porto) 


6233 Kelkheim = 
:® (06198) 7523 





Alle Preise inklusive Mehrwertsteuer. 6 Monate 
Garantie Versand erfolgt per NN oder Vorkasse 


SE \ 
3 





Peeker 1/86 23 








rechts die Anzahl der bereits eingegebe- 
nen Buchstaben (anfangs natürlich null) 
und die laufende Nummer der Vokabel (1, 
2, 3 ...) erkennen können. Der Cursor 
steht auf der ersten Eingabezeile. Dort 
geben Sie den ausländischen Teil der Vo- 
kabel ein und schließen die Eingabe mit 
Return ab. Es folgt die Übersetzung (Ende 
wieder mit Return). Die nun erscheinende 
Zeile erlaubt Ihnen folgende Möglich- 
keiten: 

—- (in Ordnung) J: Abspeicherung der Vo- 
Kabel 

— (in Ordnung) N: Korrektur der Vokabel 
- RTN: Beendigung der Eingabe mit Ab- 
speicherung der letzten Vokabel 

— E: wie RTN, jedoch ohne Abspeicherung 
der letzten Vokabel 

— S: Sicherung der eingegebenen Voka- 
belanzahl in der INFO-Datei 

Unter S versteht das Programm das Ak- 
tualisieren der eingegebenen Vokabelan- 
zahl in der Informationsdatei, das norma- 
lerweise nur bei RTN oder E stattfindet. 
Bei der Eingabe einer größeren Vokabel- 
menge empfehle ich das Sichern der Vo- 
kabelanzahl nach ca. 100 Vokabeln, damit 
der Verlust bei Ausfall der Anlage gering 
bleibt. Es bleibt noch zu erwähnen, daß die 
Länge der gesamten Vokabel 50 Buchsta- 
ben und der deutsche oder fremdsprachli- 
che Anteil der Vokabel 35 Buchstaben 
nicht überschreiten darf. Daraus ergibt 
sich bei einer DOS-losen und mit 40 
Tracks initialisierten Datendiskette eine 
Speicherungsmöglichkeit von ca. 2850 
Vokabeln pro Diskettenseite. 


Option 3: 
Vokabeln berichtigen 


Eine andere Leistung des Programms be- 
steht darin, einzelne Vokabeln einer Datei 
zu berichtigen (Option 3). Voraussetzung 
dabei ist allerdings die Kenntnis der lau- 
fenden Nummer (L) oder des fremd- 
sprachlichen Anteils (F) der Vokabel (also 
z.B. BOOK für BUCH). Die laufende Num- 
mer steht, wie bereits erwähnt, beim Hin- 
zufügen sowie beim Abfragen in der rech- 
ten Ecke des Bildschirms. L muß in Tau- 
sender- (T), Hunderter- (H), Zehner- (Z) 
und Einer- (E) Stellen eingegeben wer- 
den. Der Zugriff auf die Diskette erfolgt 
direkt und der Apple findet die Vokabel in 
sehr kurzer Zeit. Bei F hingegen muß dem 
Programm der fremdsprachliche Begriff 
mitgeteilt und — das ist wichtig — in der 
gleichen Schreibweise wie der entspre- 
chende Vokabelanteil in der Datei einge- 
geben werden, d.h. auch die Leerstellen 
sind von Bedeutung. Dann sucht das Pro- 
gramm von vorne beginnend (bei der 1. 
Vokabel) die ganze Datei nach der ange- 
gebenen Vokabel ab. Dieser Suchvorgang 
kann bei einer größeren Datei sehr lange 


24 


dauern. Viel besser ist der Zugriff mit L. 
Hat Ihr Apple die Vokabel gefunden, liegt 
es an Ihnen, diese zu berichtigen. 


Bei der danach erscheinenden Menüzeile 
stehen Ihnen vier Möglichkeiten zur Aus- 
wahl: 

— (In Ordnung) J: Abspeicherung der Kor- 
rektur 

— (In Ordnund) N: Korrektur der Korrektur 
— E: Ende ohne Abspeicherung der Kor- 
rektur 

— W: zum Menü 


Option 1: 
Vokabeln abfragen 


Das eigentliche Lernen der Vokabeln be- 
ginnt über Option 1. Es existiert eine gan- 
ze Reihe von Möglichkeiten, die Vokabeln 
abzufragen. Allen gemeinsam ist das Be- 
grenzen des abzufragenden Vokabelbe- 
reichs. Nehmen wir einmal an, die Datei 
enthalte 2000 Vokabeln, die der Lernende 
nicht kennt. Dann ist es wohl kaum sinn- 
voll, sofort den ganzen Bereich abzufra- 
gen. Aus diesem Grund gestattet das Pro- 
gramm, mit einer unteren (z.B. 500) und 
einer oberen (z.B. 550) Grenze den zu 
lernenden Bereich zu limitieren. Weiterhin 
ist bei allen Abfragemöglichkeiten die 
Festlegung der Abfragerichtung (z.B. Eng- 
lisch/Deutsch oder Deutsch/Englisch) ob- 
ligatorisch. 

Nach der Eingabe des Dateinamens und 
der Festlegung der Grenzen (untere und 
obere) müssen Sie sich entscheiden, ob 
der Computer abhängig von einer Fehler- 
hilfe abfragen soll oder nicht. 

Was bedeutet nun die Fehlerhilfe? Die In- 
formationsdatei (Name.INFO) enthält ne- 
ben der eingegebenen Vokabelanzahl zu 
jeder Vokabel eine Fehlerstufe (1, 2 oder 
3). Unter der Fehlerhilfe versteht das Pro- 
gramm die Benutzung dieser Fehlerstufen 
beim Abfragen. 


Lernen mit/ohne Fehlerhilfe 


Bei der Lerntechnik ohne Fehlerhilfe ge- 
neriert der Apple eine Zufallszahl zwi- 
schen der unteren und oberen Grenze des 
abzufragenden Vokabelbereichs und holt 
sich die jeweilige Vokabel von der Disket- 
te. Danach wird der deutsche oder fremd- 
sprachliche Anteil der Vokabel (je nach 
Wahl der Abfragerichtung) auf dem Moni- 
tor ausgegeben, und der blinkende Cursor 
fordert Sie zur Eingabe der Übersetzung 
auf. Nach Abschluß mit Return stellt der 
Apple seine und Ihre Übersetzung gegen- 
über. Mit E(nde) können Sie den Abfrage- 
modus verlassen. 


Vor der Erklärung der Abfragetechnik mit 
Fehlerhilfe soll der Sinn der einzelnen 
Fehlerstufen näher erläutert werden. 


Eine neu hinzugefügte Vokabel besitzt zu- 
nächst die Fehlerstufe 1. Wird eine Voka- 
bel abgefragt und Sie wissen die Überset- 
zung, erhöht das Programm (wenn er- 
wünscht, s.u.) die begleitende Fehlerstufe 
von 1 auf 2, d.h. alle Vokabeln, die von der 
Stufe 2 begleitet werden, haben Sie be- 
reits einmal richtig übersetzt. Bei nochma- 
liger Kenntnis der Übersetzung geht die 
Fehlerstufe 2 in die Stufe 3 über. Diese 
Vokabeln (in der Stufe 3) wurden dann von 
Ihnen mindestens zweimal richtig über- 
setzt und müssen nur noch von Zeit zu 
Zeit wiederholt werden. Es kann aber auch 
vorkommen, daß eine einmalig richtig 
übersetzte Vokabel (Fehlerstufe 2) wieder 
in Vergessenheit gerät. In diesem Fall 
rutscht die begleitende Fehlerstufe von 2 
auf 1 zurück. Daraus ergibt sich also fol- 
gende Systematik: Die Vokabeln mit der 
Fehlerstufe 

— 1 kennen Sie noch nicht oder sehr 
schlecht, 

— 2 haben Sie mindestens einmal richtig 
übersetzt, 

— 3 haben Sie mindestens zweimal richtig 
übersetzt. 

Ziel ist es natürlich, alle Vokabeln in die 
Fehlerstufe 3 zu bekommen, um sie somit 
sicher erlernt zu haben. 


Bei der Abfragetechnik mit Fehlerhilfe er- 
wartet das Programm von Ihnen die Anga- 
be, ob die Änderungen der Fehlerstufen in 
der INFO-Datei (Name.INFO) eingetragen 
werden sollen oder nicht, d.h. Sie können 
sich abhängig von den Fehlerstufen abfra- 
gen lassen, ohne die neuen Fehlerstufen 
einzutragen. 

Natürlich gibt es auch die Möglichkeit, die 
Fehlerstufen auf 1 zurückzusetzen (zu lö- 
schen), d.h. in ihren Ausgangszustand zu 
versetzen. Dabei muß man zwischen dem 
Löschen der Fehlerstufen des ausgewähl- 
ten, abzufragenden Vokabelbereichs (T = 
Teilbereich) und dem Löschen der Stufen 
aller Vokabeln (G = Gesamtbereich) diffe- 
renzieren. 

Schließlich gibt Ihnen der Apple noch die 
Verteilung der Fehlerstufen in dem zu ler- 
nenden Bereich an und fordert Sie auf, die 
Abfrageart genauer zu bestimmen. 

Es werden bei 

— 1: nur Vokabeln der Fehlerstufe 1, 

— 2: nur Vokabeln der Fehlerstufe 2, 

— 3: nur Vokabeln der Fehlerstufe 3, 

— A: alle Vokabeln im Fehlerstufenverhält- 
nis 3/2/1, 

— R: alle Vokabeln im gewählten Bereich 
der Reihe nach abgefragt. 


Bei A erfolgt das Abfragen bei Gleichver- 
teilung (z.B. bei 30 Vokabeln: 10 Vokabeln 
der Stufe 1, 10 Vokabeln der Stufe 2 und 
10 Vokabeln der Stufe 3) der Fehlerstufen 
innerhalb der Grenzen im Abfrageverhält- 


Peeker 1/86 


eek eiijijijiiriiiiiisinnrererrttirrrsrrrmlllll  — — — 





nis 3 Vokabeln der Stufe 1, 2 Vokabeln der 
Stufe 2, 1 Vokabel der Stufe 3. 

Haben Sie alle Angaben richtig beantwor- 
tet und die Abfragerichtung bestimmt, 
kann das eigentliche Lernen beginnen. 
Nach der Eingabe Ihrer Übersetzung (oder 
nur Return, falls Sie den Ausdruck nicht 
wissen) stellt das Programm seine Über- 
setzung gegenüber. Sie haben dann drei 
Möglichkeiten, die nun erscheinende Me- 
nüzeile zu beantworten: 

— (Zufrieden) J: Sie waren mit Ihrer Ant- 
wort zufrieden, und Ihr Apple ändert die 
entsprechende Fehlerstufe von 1 auf 2, 
von 2 auf 3 oder die Stufe 3 bleibt erhalten. 
— (Zufrieden) N: Sie waren mit Ihrer Ant- 
wort nicht zufrieden, und es erfolgt eine 
Fehlerstufenänderung von 3 auf 2, von 2 
auf 1 oder die Stufe 1 bleibt erhalten. 

— E: Beendigung des Abfragemodus. 


Es bleibt noch zu erwähnen, daß Sie bei 
Beantwortung der einzelnen Fragen mit S 
(selbe Parameter) alle Parameter (untere, 
obere Grenze, Fehlerhilfe, Abfragerich- 
tung usw.) bei der gleichen Datei neu wäh- 
len können. Bei der Angabe der unteren 
oder oberen Grenze des abzufragenden 
Bereichs bewirkt das Drücken auf die Ta- 
ste S das Übernehmen der alten, bereits 
bestimmten Grenzen. 


Option 7: 
Disketten kopieren 


Da sich das Eingeben der Vokabeln (Hin- 
zufügen) als sehr arbeitsintensiv erweist, 
ist es dringend zu empfehlen, von jeder 
Datendiskette eine Sicherungskopie anzu- 
fertigen, damit Sie bei Beschädigung der 
Originaldiskette auf die Kopie zurückgrei- 
fen können. Das Kopieren von Disketten 
gestattet Ihnen die Hauptmenü-Option 7. 
Damit für den Kopiervorgang genug Spei- 
cherplatz vorhanden ist, wird ein kleines 
BASIC-Programm mit dem Namen VOK- 
.COPY geladen. Das eigentliche Kopieren 
übernimmt allerdings ein Maschinenpro- 
gramm mit dem Namen VOK.BCOPY, wel- 
ches die Language-Card benötigt. Mit dem 
Drücken auf die Leertaste (Space) leiten 
Sie einen 40-Track- und mit „3“ einen 35- 
Track-Kopiervorgang ein. Der weitere Dia- 
log erfolgt mit der Leertaste. Es gibt jedoch 
eine Ausnahme: Ist die Zieldiskette nicht 
formatiert, können Sie nach dem ersten 
Einlegen der unbehandelten Diskette mit 
I(nit) statt Space eine Initialisierung der 
Disk vor dem Kopiervorgang erreichen. 
Nach vier Lese- und Schreibvorgängen ist 
das Duplizieren beendet. 


Peeker 1/86 


4. Noch einen Tip 


Ich empfehle Ihnen, die Vokabeln in 50er- 
Schritten zu lernen (z.B. Vokabeln 1-50, 
dann 51-100 usw.). Bei neuen Vokabeln 
können Sie diese der Reihe nach (Abfra- 
geart R) ohne Fehlereintrag zunächst ein- 
mal kennenlernen. Danach fragen Sie nur 
Vokabeln der Fehlerstufe 1 (am Anfang 
oder nach dem Löschen sind alle Voka- 
beln in der Fehlerstufe 1) mit Fehlereintrag 
solange ab, bis Sie alle Vokabeln einmal 
richtig übersetzt haben, d.h. alle in der 
Fehlerstufe 2 enthalten sind. Jetzt ist es 
ratsam, eine Pause von einem oder meh- 
reren Tagen einzulegen und beim näch- 
sten Lerntermin die Fehlerstufe 2 solange 
abzufragen, bis alle Vokabeln entweder in 
die Stufe 1 zurückgefallen (vergessene 
Vokabeln) oder in die Stufe 3 aufgestiegen 
sind (zweimal richtig übersetzt). Mit den 
zurückgefallenen Vokabeln verfahren Sie 
wie am Anfang. Sie sind also solange zu 
wiederholen, bis alle wieder in die Stufe 2 
aufgerückt sind. Danach sollten Sie eine 
Pause einlegen (ca. 1 Tag) und darauf nur 
Vokabeln der Stufe 2 abfragen, bis einige 
nochmals in die Stufe 1 zurückgefallen 
und andere in die Stufe 3 aufgestiegen 
sind. Die Anzahl der in die Stufe 1 zurück- 
gleitenden Vokabeln wird immer kleiner 
werden. Am Schluß des Lernvorgangs be- 
finden sich (fast) alle Vokabeln in der Feh- 
lerstufe 3. 

Natürlich sollten Sie die gelernten Voka- 
beln von Zeit zu Zeit wieder auffrischen. 
Wenn Sie Ihre Englischkenntnisse vertie- 
fen oder auffrischen wollen, so können Sie 
auf die bereits eingegebene Datei zurück- 
greifen, die sich auf der Peeker-Sammel- 
diskette befindet. 


Kurzhinweise 


1. Zweck: 

Vokabellernprogramm 

2. Konfiguration: 

Apple Il+/e/c; 40 Z/Z; Kleinschreibung 
nicht erforderlich; DOS 3.3 (ggf. für 40- 
Spur-Laufwerke); kein ProDOSI 

3. Test: 

RUN VOK.TRAINER 

dann über Menü-Option 1 (= Vokabeln 
abfragen) deutsch-englische Übungsdatei 
„GWS“ einlesen. 

4. Sammeldisk: 

VOK.TRAINER (Hauptprogramm) 
VOK.COPY (Kopierprogramm) 
VOK.PACK (Trainer-Hilfsroutinen) 
VOK.BCOPY (Kopier-Hilfsroutine) 
GWS.INFO (Deutsch-Englisch-Info) 4 
GWS.VOK (Deutsch-Englisch-File) = 


4 schule 44 


ProDOS-Editor 1.0 


Applesoft-Editor 
unter ProDOS-Betriebssystem 


von. Stiehl 


1984, Diskette und Manual, DM 98,— 
ISBN 3-7785-1024-X 


Mit diesem neuen Editor — übrigens 
der bislang einzige deutsche Pro- 
DOS-Editor — wird dem Applesoft- 
Programmierer ein Werkzeug zur ef- 
fektiven Programmierung unter dem 
Betriebssystem ProDOS gegeben, 
denn die früheren Editoren sind alle- 
samt unter ProDOS nicht mehr lauf- 
fähig. 


Unter anderem sind folgende Fea- 
tures implementiert worden: 


Zeilenorientierter Editor mit jedem er- 
denklichen Redigierkomfort (Insert, 
Delete, Tab, Restore, freie Cursorbe- 
wegung in allen vier Richtungen, Einga- 
be von Ctrl-Buchstaben in Applesoft- 
Zeilen usw.) 


Renumber (Zeilen-Umnumerierung) 
Xreference (sortierte Variablenliste) 


Suchen von Tokens, Strings und Varia- 
blen 

dezimale und hexadezimale Umrech- 
nungen 

Ausführung von Monitorbefehlen aus 
dem Editor heraus 

Listen des Applesoft-Programms in 
speicherinterner Form als Hex-Dump 
Adressen 
im gesamten 
einschließlich der 


Suchen von Hex-Folgen, 
oder Speicherstellen 
RAM-Bereich 
Language-Card 


frei definierbare Tastatur-Macrobefehle 


Der Applesoft-Editor liegt in einem 
von ProDOS geschützten Bereich 
und läßt sich per Tastendruck vor- 
übergehend abschalten und ebenso 
einfach wieder aktivieren. 


Gerätevoraussetzung: Apple Il+, Ile 
oder Ilc, 40 Zeichen/Zeile 


Hüthig Software Service, 
Postfach 10 28 69, 
D-6900 Heidelberg 


25 





Verkauf Software 


Apple: Public Domain: Pro 
Volume DM 15,— Games, Schach, 
Graphic u.v.a.m. Derw. Lehrerpro- 


gramme, 'Mini-Logo'! Gratisinfo: 
Fa. Walt. Muhle, Waldwinkel 3,2105 
Seevetal 3 


PIRATE DEFENCE 2.0 
Kopierschutz Gehört zu den 
sichersten Schutzsystemen 
Deutschlands. Für DOS, ProDOS, 
DIVERSI u. a. Info (50 Pf), Chr. 
Bregler, Tulpenstr. 2, 7519 Eppin- 
gen. Händleranfragen erw.! 


MULTIPLAN (Macintosch) 
DM 290 APPLE ACCESS (lle/llc) 
DM 120 dAdress (dBase || erford.) 
DM 120 dLager (dBase Il erford.) 
DM 120 U. Blaseg 0 7529-408 


P-Code Disassembler DM 
50,-, K. Seiler, Willy-Andreas- 
Allee 1, 7500 Karlsruhe 1 


-Kredit-Programm- für App- 
le- Ilc DM 40,- inkl. Must. Fa. 
Stampflmeier, 82 Rosenheim, von 
der Tannstr. 11 


Print Shop Newsroom etc. / 
Apple ändere ich für Ihr Drucker- 
IF! Disk-Copy für EHRING & ER- 
PHI Super-Prgm. auch PCTEXT/ 
PC-1500 Rüter Rah. Str. 65, 4955 
H. 05703/672 


Apple Il-Spiele-Programmie- 
rung: Hires-Schrift und Sprites 
(Rout. mit Sourcefiles und Erklä- 
rung): Disk nur DM 28, - 

Tel: 0261/63586 


Orgin. Flight Simulator || 
100- die verlassene Burg 30,- 
T: 04101/34327 


Verkauf Hardware 


128 auf 512K DM 798,— 
Bausatz DM 298,-, ab 17h, 
Telefon 089/985889 


Für weitere Informationen zu einem 





Centronic Parallel Grafik 
Interface, DM 140 VHB, T: 06142/ 
60 34.43 


Fernschreiberinterface am 
Gameport m. Programm DM 79,— 
P. Benner, Hubertusstr. 131, 4150 
Krefeld 


Apple Il komp. mit 80 Zeichen- 
Pal-V24-Karten u. Paddle User- 
Buch für DM 700,-, T. 06202/16513 


Apple Ilc Monit. Maus, 
Joyst. Imagewriter, Olivetti-Pra- 
xis 30 mit Seriellem Interf., 6 Mon. 
Tel: 02161/26698 


NEC P2 incl. V. 24, Autom. 
Einzelblatteinzug, Kabel für Apple 
IIcod. MAC, 7 Farbbänder statt NP 
3428 nur DM 2308. T: 08806/ 
338 


Soundchaser Musik-System 
mit Softw. & Keyboard, Tel: 
04743/5500 


Apple Il + kompatibler IBM 
Gehäuse 64 KB+Z80 900,- 
Laufwerk TEAC 55F 400,- ERPHI 
kon. 250 T: 04101/34327 


Matrixdrucker Gemini 10X, 
Thermodrucker Trendcom 200, 2 
Cumana LW, IF (Text-Graph), 80Z, 
Monitor, kompl. DM 1350,-, Mo- 
Do 02173/30384, Fr-So 0641 / 
33169 


Apple Il komp. Z80, 80/2, Er- 
phi-Cont., 2X620K Lw, Wordstar- 
Tastatur, Monitor, Softw., DM 2800 
Tel: 0831/95558 


Verk. Apple lic + Monitor 
+UCSD Pascal + Reference ma- 
nual Vol. 1 und 2. T: 089/ 
8507173 ab 18h. 


Apple Il+ orig., 64K, VB DM 
2400,- 80Z-Karte 1/2 Jahr für DM 
120,- Tel: 06103/34290 


Video-Interface zum Ein- 
blenden von Schriften mit dem 
Apple II DM 1075,- bei Ulrich Kall- 
weit, Haus Mallinckrodt, 5802 Wet- 
ter 1 


Apple lic + Lit. + ASS.-Tools 
u. ASS.- Kurs, VB DM 2600, 089 / 
6123752 


Tastatur, programmierbar f. 
Apple Il im IBM-Look VB. DM 200 
T: 0203/47 1265 


Apple Ilc, 2.LW, Maas; CP/M- 
Karte, Software, VB DM 4600; 
0221/761845 


Verkaufe Drucker-Star mit 
Graf-Star Karte zus. DM 700,- 
Tel: 02384/3909 


APPLE REPARATUREN 
(auch compatible M-boards, z.B. 
Atlas, Arca, CES, Datastar, 
Dipa, Lasar, Mewa, 

PC-48 + 64, Plato, Radix, o 
ae.) sowie Zusatzkarten und 
Disk-Drives führt unser Speziali- 
stenteam mit mehr als 5-jähriger 
Kunden- und Reparatur-Dienst-Er- 
fahrung, garantiert zuverlässig und 
besonders kostengünstig aus. 
Bitte genaue Fehlerangabe sowie 
Tel. Nr. für evtl. Rückfragen nicht 
vergessen. 

Auf Wunsch Kostenvoranschlag. 
aaa-electronic gmbh 
Habsburgerstr. 134, 7800 Freiburg, 
Tel. 0761/276864, Tx. 772642 aaad 


Hard- und Software für Apple- 
Computer gesucht. Wer schreibt 
gute Software? Auch Gebrauchtes 
angenehm. Zahle Höchstpreise! 
Suche noch Leute, die nebenbei 
verdienen wollen. Zuschriften 
Chiffre P1005 


PEEKER 494994 
Börse 


** Neue Bücher für den Apple Il xx 
Elektronik- und Graphik-Pro- 
gramme 

Die Programm-Fundgrube zu fol- 
genden Themen: Statistik, Filter, 
Netzwerke, Laplace- und Fourier- 
Transf., Komplexe Rechnung, Dia- 
gramme usw., zahlr. Abb., 184 S., 
16,5 x 23,5 cm, DM 39,80 

Apple II — leicht program- 
miert 

Der Wegweiser zum eigenen Pro- 
gramm: Zählen, Schleifen, Strings, 
Eingabe, Druckformatierung, Adress- 
verw. usw., 96 S., 16,5 x 23,5 cm, 
DM 22,80 

BASIC-Tricks für den Apple Il 
Die Trickkiste für die professionelle 
Programmgestaltung: Eingabe, Me- 
nüs, Sortieren, Listengestaltung, 
Fehlererkennung/Korrektur, Datei- 
en usw., 144 S., 16,5 x 23,5 cm, 
DM 29,80 

Bei Bestellung bitte DM 2,50 für 
Porto und Verpackung addieren. 
beam-Verlag, 

Pf. 1148P, 355 Marburg 


KRRFFFFIITTIIEIEEI AK 


Ankauf Hardware 


Günstiges auch gebrauch- 
tes Koala Pad o. ä. für A. II+ 
T: 021 96/2463 


Ankauf Software 


Datenbank Literaturverwal- 
tung für Apple Ile sucht 
Telefon 06162/73233 


Komfortable Apple Fak- 
turierung ges. für PRODOS, mit 
Statistik, Gutschrift, Rückstand, 
USW. 


Suche Spiele für Apple 
T: 02302/89694 


der in dieser Ausgabe vorgestellten 
Produkte stehen Ihnen die Produktkarten zur Verfügung 


Bitte verwenden Sie für Kleinanzeigen die vorgedruckten Antwortkarten in 
diesem Helft. 


26 





Peeker 1/86 






Für Ihre Unterlagen 
Abonnement bestellt 





En 





Ja, ich möchte Peeker abonnieren. 


Liefern Sie mir Peeker ab Ausgabe ............... zum Jahresbezugspreis 
von DM 72,- (Inland) inkl. MwSt. Die Lieferung erfolgt frei Haus. Porto, Verpak- 
kung und Zustellgebühren übernimmt der Verlag. Der Jahresbezugspreis für das 
Ausland beträgt DM 72,- inkl. MwSt., zzgl. DM 18,— Versandspesen. 


am: 


Vertrauensgarantie: 

Ich habe davon Kenntnis genommen, 
daß ich die Bestellung schriftlich 
durch Mitteilung an den Dr. Alfred 
Hüthig Verlag, Postfach 102869, 
6900 Heidelberg 1 innerhalb von 7 
Tagen widerrufen kann. Zur Frist- 
wahrung genügt die rechtzeitige Ab- 
sendung des Widerrufs (Datum des 


Ich wünsche jährliche Berechnung durch: 
[_] Verlagsrechnung [_] Abbuchung von meinem Bank- 
bzw. Postscheckkonto 


28 Abo-Karfe 


Poststempels). 
Peeker Bank / PschA 
Leserservice 
Postfach 102869 Bankleitzahl Kto.-Nr. 
6900 Heidelberg 1 
Datum Unterschrift 


Für Ihre Unterlagen 
Folgende Bücher bestellt: 


EEkKER 


Bitte senden Sie mir gegen Rechnung folgende Bücher: 





2000 





4, 


am: 
bei: 





Peeker 
Versandbuchhandlung 


Postfach 102869 
6900 Heidelberg 1 


Für Ihre Unterlagen 
Folgende Disketten 
und Programme bestellt: 


Datum Unterschrift 


Wa Buch-Karte 


EEkKER 





Em 





© Bitte senden Sie mir gegen Rechnung folgende Disketten: 
oO U] Peeker-Sammeldiskette, einzeln UL] Apple DOS 3.3, Begleitdiskette, DM 28,— 
Bag Disk# _____, Disk# [| ProDOS, Band 1, Begleitdiskette, DM 28,- 
Disk# —— Disk#+ [] ProDOS, Band 2, Begleitdiskette, DM 28,— 
2 Preis je Disk DM 28,- (einzeln) OD) Apple Assembler, Begleitdiskette, DM 28,- 
N) OD) Peeker-Sammeldiskette, UL] ProDOS-Editor 1.0, Programm, DM 98,- 
En im Fortsetzungsbezug D) MMU 2.0, Programm, DM 98,- 
O ab Disk + D INPUT 2.0, Programm, DM 98,- 
(Mindestbezug 6 Disketten) UL] Softbreaker 1.0, Programm, DM 48,— 
Preis je Disk DM 20,- L] DB-Meister, Programm, DM 290,— 
bei: Neben DOS-Disketten auch liefern Q Superplot, Programm, DM 48,- 
Peeker O D CP/Mja 7 CP/M nein DL] Superquick, Programm, DM 48,— 
Inei [] Turtle Graphics, Programm, DM 98,- 
Softwareabteilung 177) I Pascaljia DJ Pascal nein g 
Postfach 102869 
6900 Heidelberg 1 Pe -. 











Firma 





Abteilung 








Vertrauensgarantie: 

Ich habe davon Kenntnis genommen, daß ich die Bestellung 
schriftlich durch Mitteilung an den Dr. Alfred Hüthig Verlag, 
Postfach 102869, 6900 Heidelberg 1 innerhalb von 

14 Tagen widerrufen kann. Zur Fristwahrung genügt die 
rechtzeitige Absendung des Widerrufs (Datum des 
Poststempels). 


Datum 


Unterschrift 


Verlagshinweis: 

Das Abonnement verlängert sich zu den jeweils gültigen 
Bedingungen um ein Jahr, wenn es nicht 2 Monate vor 
Jahresende schriftlich gekündigt wird. 


. 





Karte bitte vollständig ausfüllen 





Vorname, Name 


Karte 


Ri 
= 
D 





PLZ/Ort 


Telefon mit Vorwahl 


Buch 








Karte bitte vollständig ausfüllen 


Vorname, Name 





PLZ/Ort 


Telefon mit Vorwahl 


= 

E 

Q 

- 

E= 

a 
E 





POSTKARTE 


Peeker 
Leserservice 


Dr. Alfred Hüthig Verlag 
Postfach 102869 
6900 Heidelberg 1 


POSTKARTE 


Peeker 
Buchabteilung 


Dr. Alfred Hüthig Verlag 
Postfach 102869 
6900 Heidelberg 1 


POSTKARTE 


Peeker 
Softwareabteilung 


Dr. Alfred Hüthig Verlag 
Postfach 102869 
6900 Heidelberg 1 


INPUT 2.0 


Ein Bildschirm- 
Maskengenerator 


für DOS 3.3 und ProDOS 

von. Stiehl 

1984, Diskette und Manual, DM 98,— 

ISBN 3-7785-1021-5 

„Input 2.0 liegt wahlweise in der Bank 1 
oder Bank 2 der Language Card und wird 
durch einen kurzen Driver in den unteren 
48K aufgerufen. 

Für jedes Feld der Bildschirmmaske lassen 
sich u.a. definieren: Feldlänge (bis zu 255 
Zeichen) — Vtab — Htab — Datentyp (insge- 
samt 8 Typen) — Scrollflag (starre oder dyna- 
mische Maske) — Ctriflag — Füllflag — Lösch- 
flag — Bildschirmflag (40- oder 80-Z-Darstel- 
lung). Innerhalb eines Eingabefeldes besteht 
jeder denkbare Redigierkomfort (Insert, De- 
lete, Rubout, Restore usw.). 
Gerätevoraussetzung: Apple Ile oder IIc; fer- 
ner Apple II+ im 40-Zeichenmodus 


MMU 2.0 


Memory Managements 
Utilities 

für die Apple lle 64K-Karte 

DOS 3.3 (und ProDOS) 


von. Stiehl 


1984, Diskette und Manual, DM 98,— 
ISBN 3-7787-1023-1 


Insgesamt enthält die neue „MMU 2.0"- 
Diskette über 25 Programme, die neue 
Einsatzmöglichkeiten für die Extended 80 
Column Card (erweiterte 80-Z-Karte = 
64K-Karte für den Apple Ile) erschließen. 
Ein Teil der Programme laufen auch auf 
dem Apple II Plus, doch ist „MMU 2.0" 
primär für 64K-Karte-Besitzer gedacht. 


Gerätevoraussetzung: Apple Ile mit 64K- 
Karte oder IIc 


Softbreaker 1.0 


Eine softwaremäßige Interrupt-Utility 
für die Apple lie 64K-Karte 


von U. Stiehl 


1984, Diskette und Manual, DM 48,- 
ISBN 3-7785-1022-3 


Softbreaker ist ein Assemblerprogramm, mit 
dessen Hilfe Programme, die sich von der 
64K-Karte (= Extended 80 Column Card für 
den Apple Ile) starten lassen, unterbrochen, 
gespeichert, geladen und exakt an der Stelle 
der Unterbrechung fortgeführt werden kön- 
nen. Dadurch ist es auch möglich, Siche- 
rungskopien von sogenannten kopierge- 
schützten Programmen herzustellen. 

Mit Softbreaker unterbrochene Programme 
werden komplett, d. h. die ganzen 64K ein- 
schließlich Language Card, in nur ca. 11 Se- 
kunden auf einer formatierten Diskette gesi- 
chert. 

Gerätevoraussetzung: Apple Ile mit 64K- 
Karte 


Hüthig Software Service, 
Postfach 10 28 69, D-6900 Heidelberg 





| Kyan-Pascal 


Kyan-Pascal ist ein völlig neuartiges Pascal-System für den Apple Il+/e/c, das von der Firma Kyan Software in San Francisco 
entwickelt wurde und als Version 1.0 im April dieses Jahres erstmals ausgeliefert wurde. Inzwischen gibt es die neueste Version 
1.2 vom 14. August 1985. 


Vor- und Nachteile von Kyan-Pascal 


1. UCSD-Pascal-Implementierungen für 
den Apple Il laufen zwar unter dem 
6502-Prozessor und sind deshalb auf 
den Apple bestmöglich angepaßt, 
doch wird nur der relativ langsame 
Pseudo-Code erzeugt. Z80-Pascal- 
Implementierungen sind demgegen- 
über zwar in der Regel als Vollcompi- 
ler ausgelegt, doch wird erstens eine 
Z80-Karte benötigt und zweitens läßt 
die Anpassung an den Apple Il, z.B. 
bezüglich der HGR-Grafik, zu wün- 
schen übrig. 


Kyan-Pascal erzeugt einen echten 
6502-Objektcode. Es vereinigt damit 
die Geschwindigkeitsvorteile eines 
Vollcompilers mit der bestmöglichen 
Anpassung an den Apple Il. 


2. Kyan-Pascal läuft unter allen denkba- 
ren Apple-Konfigurationen (II+/e/c). 
Man kann es bereits mit Nutzen ein- 
setzen, wenn man nur über eine Mini- 
malkonfiguration mit Apple II+/e oh- 
ne 80-Zeichenkarte und ohne zweites 
Laufwerk verfügt, weil auf der (unge- 
schützten) Programmdiskette noch 
über 40.000 Bytes für die Arbeitsdatei 
frei sind. Wer besser ausgestattet ist, 
kann eine 80-Zeichenkarte, ein zwei- 
tes Laufwerk sowie eine RAM-Disk 
verwenden. 


3. Kyan-Pascal läuft unter dem (mitge- 
lieferten) Betriebssystem ProDOS 
und kann deshalb auch in Verbindung 
mit größeren Massenspeichern (Fest- 
platten sowie 80-Spur-Disketten 
usw.) problemlos eingesetzt werden. 


4. Im wesentlichen besteht Kyan-Pascal 
aus einem sehr brauchbaren Full- 
screen-Editor (in zwei Versionen für 
40- und 80-Zeichendarstellung), der 
auch als Textverarbeitungsprogramm 
benutzt werden kann, einem Compi- 
ler und einer Runtime-Library (Biblio- 
theksdatei). 


Peeker 1/86 


. Der 


Fertig compilierte Programme können 
in Verbindung mit der Bibliotheksdatei 
unabhängig von Kyan-Pascal als Pro- 
DOS-Systemdateien gestartet wer- 
den. Die Weitergabe der Runtime- 
Library wird von der Firma Kyan Soft- 
ware ohne Zahlung von Lizenzgebühr 
gestattet. 


Kyan-Pascal-Befehlssatz lehnt 
sich eng an Standard-Pascal an, so 
daß beispielsweise Befehle wie GO- 
TOXY usw. fehlen. Für String-Verar- 
beitung und HGR-Grafik werden je- 
doch Include-Dateien mitgeliefert. 
Dieser zunächst gravierend erschei- 
nende Nachteil wird jedoch — wie wir 
meinen — durch zwei entscheidende 
Vorteile aufgehoben: 


a) Ein laufendes Kyan-Pascal-Pro- 
gramm befindet sich in der von Apple- 
soft her gewohnten Monitor-Umge- 
bung, d.h. der Pascal-READLN- 
Befehl wird z.B. durch die Monitor- 
Routine GETLN (entspricht dem 
Applesoft-INPUT-Befehl) realisiert. 
Der Aufruf von Monitor- oder gar 
Applesoft-ROM-Routinen ist deshalb, 
wenn man auf die Zero-Page Rück- 
sicht nimmt, grundsätzlich möglich. 


b) In einen Kyan-Pascal-Quelltext 
können beliebig viele echte 6502- 
Quelltexte eingebaut werden. Man 
kann deshalb Kyan-Pascal auch als 
6502-Assembler benutzen. Ein Bei- 
spiel-Programm macht dies deutli- 
cher: 


PROGRAM DEMO; 
BEGIN 
WRITELN (’Jetzt 6502’); 
4a {Beginn Assembler} 
HOME EQU $FC58 
BELL EQU $FBDD 
JSR HOME ;Bildschirm löschen 
JSR BELL ;Piepston ausgeben 
{usw.} 
#({Ende Assembler} 
WRITELN (Das war 6502’); 
END. 


Auf diese Weise ist es prinzipiell 
möglich, beliebige Assemblerrouti- 
nen in Kyan-Pascal-Programme ein- 
zubauen und darüber hinaus die in 
Standard-Pascal nicht vorhandenen 
Befehle zu kompensieren. 


6. Kyan-Pascal scheint uns sowohl für 
Anfänger, insbesondere auch im 
Schulunterricht, als auch für Fortge- 
schrittene bestens geeignet zu sein. 
Anfänger können sich auf den Stan- 
dard-Befehlssatz beschränken, wäh- 
rend Fortgeschrittene die Assembler- 
Features ausnutzen können. Übri- 
gens erzeugt Kyan-Pascal beim 
Compilieren ein echtes 6502-Quell- 
code-Listing, und zwar auch für die 
Pascal-Befehle, so daß ein nachträgli- 
ches Optimieren des Assembler- 
Quellcodes möglich ist. 


Einladung zum Sammelbezug 


Kyan-Pascal kostet in den USA 69.95 
Dollar. Unter Berücksichtigung der Aus- 
landseinfuhr- und Überweisungskosten 
muß man umgerechnet über DM 200,— 
bezahlen. Damit Sie diese interessante 
Pascal-Implementierung so günstig wie 
möglich beziehen können, bieten wir 
Ihnen als Peeker-Serviceleistung die 
Teilnahme am Sammelbezug an. Als 
Stückpreis* haben wir DM 170,- (inkl. 
Porto, Verpackung und MwSt) festgelegt. 
Voraussetzung hierfür ist allerdings, daß 
eine ausreichende Anzahl von Vorbe- 
stellungen eingeht. Werten Sie bitte die- 
se Aktion als einen Versuch, Software im 
Sammelbezug preiswert zu erwerben. 
Sollten sich nicht genügend Interessen- 
ten melden, so müssen wir dieses 
Service-Angebot wieder vergessen. 
Kyan-Pascal ist freilich auch bei ein- 
schlägigen Importeuren (für z. Zt. ca. DM 
270,-) erhältlich. 


Wie wird’s gemacht? Senden Sie uns bis 
spätestens 31.1.1986 Ihre Bestellung über 
Kyan-Pascal zum Preis von DM 170,- inkl. 
Versandspesen. Teilnehmen können alle 


Peeker-Leser. Ihre Peeker-Redaktion 
* Diskette + 100seitiges Handbuch 


kurzberichte 44 


29 








Applesoft-HGR- 
Erweiterung 


von Klaus Schäfer 


Die Grafik-Befehle des Applesoft-BASIC 
sind ziemlich spartanisch. Mit dem Ma- 
schinenprogramm AGE ist es möglich, ein 
Hires-Bild individuell zu verändern. Das 
Programm wird über den Ampersand-Vek- 
tor angesteuert und ist somit leicht in ei- 
nem BASIC-Programm einsetzbar. AGE- 
„DEMO zeigt eine Anwendung der neuen 
Befehle. 


1. Die neuen Befehle 


Das einfachste neue Kommando ist das &- 
Zeichen allein. Durch diesen Befehl wird 
eine Liste der verfügbaren Kommandos 
sowie deren Syntax ausgegeben: 


Verfügbare Kommandos: 


TURN <BUF>,<PART> 
REFLECT <BUF>,<PART> 
INVERT <BUF>,<PART> 
SWAP <BUF>,<BUF> 
COPY <BUF>,<BUF> 
MERGE <BUF>,<BUF> 
SHOW <BUF> 

SHRINK <BUF>,<PART> 
WIDE <BUF>,<PART> 


Die Parameter können sowohl als Zahlen 
als auch als Variablen angegeben werden. 
BUF steht für die Bildschirmseite. Dabei 
bedeutet 1 = HGR und 2 = HGR2. 

PART (im Bereich 0-4) gibt die folgenden 
Bildschirmausschnitte an: 

1 links oben (Zeile 0-95 und Spalte O- 


139); 

2 = rechts oben (Zeile 0-95 und Spalte 
140-279); 

3 = links unten (Zeile 96-191 und Spalte 
0-139); 

4 = rechts unten (Zeile 96-191 und Spal- 
te 140-279); 

0 = der ganze Bildschirm. 

30 


ın Assembler 


Allen folgenden Befehlen muß das &-Zei- 
chen vorangestellt werden. 

— TURN dreht einen Bildschirmausschnitt 
um 180 Grad, das Bild wird also auf den 
Kopf gestellt. Die Parameter sind hierbei 
BUF, also entweder 1 für HGR oder 2 für 
HGR2, und PART im Bereich 0-4. 

- REFLECT spiegelt einen Bildschirmaus- 
schnitt (also spiegelverkehrte Darstellung 
des Bildes), wobei die Parameter die glei- 
chen sind wie bei TURN. 

— INVERT invertiert einen Bildschirmaus- 
schnitt, d.h. es wird das Negativ des Bildes 
erzeugt: schwarz auf weiß wird weiß auf 
schwarz. Auch hier sind die Parameter 
wieder identisch. 

Die Befehle SWAP, COPY und MERGE 
befassen sich jetzt nicht mehr mit einem 
Bildausschnitt, sondern nur noch mit dem 
ganzen Bild. 

— SWAP vertauscht die beiden Hires- 
Bilder. 

— COPY kopiert eine Bildschirmseite in die 
andere. 

— MERGE verschmelzt beide Bilder zu 
einem. Der erste Parameter BUF ist hier 
die Ausgangsseite, also 1 oder 2, der 
zweite Parameter BUF bezeichnet den Be- 
stimmungsbildschirm. 

— SHOW ist der einfachste Befehl. Er be- 
wirkt nur, daß die jeweilige Seite gezeigt 
wird, ohne diese zu löschen (was bei HGR 
oder HGR2 passieren würde). 

Die komplexesten Befehle sind WIDE und 
SHRINK. 

— SHRINK verkleinert ein ganzes Hires- 
Bild zu einem Viertel der Ursprungsgröße. 
Als Parameter ist hier BUF der Ausgangs- 
bildschirm (also die Seite, in der das zu 
verkleinernde Bild steht) und PART der 
Teil des anderen Bildschirms, in den ver- 
kleinert werden soll. 

— WIDE kehrt die Wirkung von SHRINK 


um, vergrößert also ein Viertel-Bild zu ei- 
nem ganzen. Parameter hier sind die Aus- 
gangsseite BUF und der Viertel-Ausschnitt 
PART. Vergrößert wird wieder in die ande- 
re Seite. 


Beispiele: 


&INVERT 2,1 (invertiert HGR2 links oben). 
&TURN 1,0 (dreht die ganze HGR). 

& COPY 1,2 (kopiert HGR nach HGR2). 

& SWAP 1,2 (vertauscht HGR und HGR2). 
&MERGE 1,2 (vermischt HGR und HGR2 
in die HGR2). 

& SHOW 2 (zeigt HGR2). 

&WIDE 2,1 (vergrößert HGR2 links oben 
nach HGR) 

&SHRINK 2,4 (verkleinert HGR2 nach 
HGR rechts unten) 


2. Änderungsmöglichkeiten 


Das Programm kann recht einfach erwei- 
tert werden. Hierzu muß lediglich die 
Kommandbotabelle (Zeile 131-160) sowie 
die Tabelle der Routinenadressen erwei- 
tert und die eigene Routine angehängt 
werden. Außerdem ist darauf zu achten, 
daß eventuell die Startadresse des Pro- 
gramms geändert werden muß, da nur 
noch wenige Bytes bis HIMEM frei sind. 
Gekürzt werden kann noch leichter, da 
einfach das Kommando und die entspre- 
chende Adresse aus der Kommando- und 
Adreßtabelle gestrichen werden muß. Es 
genügt dann, die Routine einfach wegzu- 
lassen. 


3. Beschreibung der Routinen 


Das Programm wird unter DOS 3.3 mit 
BRUN AGE 

gestartet. Die Zeilen 36-49 initialisieren 
das Programm, d.h. der Ampersand-Vek- 
tor wird auf den Programmstart gerichtet 


Peeker 1/86 








und HIMEM so gesetzt, daß es nicht durch 
Strings überschrieben wird. 

In Zeile 50-117 befindet sich der Com- 
mand-Interpreter. Hier werden die Kom- 
mandos aus der Kommandotabelle (131- 
160) der Reihe nach mit dem tatsächlich 
eingegebenen Kommando verglichen. 
Wenn in Leerzeichen erreicht wird, ist das 
richtige Kommando gefunden. Das Ende 
der Tabelle zeigt, daß kein gültiges Kom- 
mando gefunden wurde. Falls der Befehl 
gültig ist, wird die Adresse der Routine aus 
der Adreßtabelle entnommen und auf dem 
Stack abgelegt, um dann mit einem RTS 
angesprungen zu werden. 

Von 176-227 steht die Hauptroutine IN- 
VERT. Diese besteht aus einer großen 
Schleife, die die 192 Bildschirmzeilen 
durchzählt (als Zählregister dient das X- 
Register). Die Adresse der jeweiligen Zei- 
le steht in COUNT1, im Y-Register werden 
die 40 Bytes einer Zeile durchgezählt. (Je- 
des Byte besteht aus 8 Bits, wovon 7 
einen Punkt darstellen; 40 x 7 ergibt also 
unsere 280 Punkte in X-Richtung). 
REFLECT (228-300) arbeitet im Prinzip 
genauso, wobei hier jedoch nicht invertiert 
wird, sondern der am weitesten rechts ste- 
hende Punkt einer Zeile ganz nach links 
gesetzt wird usw. Dieses Verschieben in- 
nerhalb eines Bytes erledigt die Unterrou- 
tine ROTATE (556-586). 

Bei TURN (301-392) wird ähnlich wie beim 
Spiegeln innerhalb einer Zeile vertauscht, 
dann jedoch noch die oberste mit der un- 
tersten Zeile vertauscht. Die Zähler laufen 
wie bei REFLECT. 


AGE.DEMO 


10® REM AGE-Demo 

11® REM 

128 PRINT CHR$ (4)"BRUN AGE" 
13® REM Zeichnen des Bildes 
149 PRINT CHR$ (21) 

159 HGR : HGR2 : HCOLOR= 3 
168 FOR I = ß TO 279 STEP 4 
170 J=1Ix 96 / 149 

180 HPLOT 9,8 TO I,191 

198 HPLOT 9,9 TO 279,J 

200 NEXT I 

21® REM Verkleinern nach HGR 
220 & SHOW1 

238 FOR I = 1 TO 4: & SHRINK2,I: 
240 REM Spiegeln und drehen 
250 & TURNI1,1 

260 & REFLECT1,2 

278 & TURN1,2 

280 & REFLECT1,3 

290 & INVERT1,® 

30® REM Noch einmal verkleinern 
3l® FrRI=1T0 4 

320 & SHOW2 

330 & SHRINK1l,I 

34® NEXT I 

350 REM Drehen und wenden 
36d & TURN2,® 

37® & REFLECT2,® 

380 & SHOW 

39® REM Wieder vergrößern 
400 & WIDE2,1 





Peeker 1/86 


COPY, SWAP und MERGE sind in einer 
Routine integriert (414-503). Auch hier 
werden wieder die 192 Bildschirmzeilen 
durchgezählt. Entweder wird eine Zeile auf 
die andere kopiert oder die zwei Zeilen 
werden vertauscht oder gemeinsam mit 
EOR verknüpft. 

Die folgende Unterroutine CALCCUR wird 
von fast jeder Hauptroutine benutzt. Hier 
wird die Adresse des am weitesten links 
stehenden Bytes einer Zeile (im X-Regi- 
ster) berechnet. Dies geschieht durch die 
Interpreter-Routine HPOSN. 

Noch einfacher ist die nächste Hauptrouti- 
ne SHOW zu verstehen. Hier werden nur 
die jeweiligen Softswitches betätigt, um 
die gewünschte Seite anzuzeigen. 

Die Zeilen 587-610 beinhalten die Unter- 
routine TESTBUF. Hier wird das eingege- 
bene Kommando darauf abgesucht, wel- 
che Grafik-Seite angesprochen werden 
soll. Diese Seite wird dann entsprechend 
gesetzt (Adresse $00E6 in der Zero Page). 
Ab 622 steht die Routine HILFE. Dieser 
Programmteil gibt die Kommandotabelle 
auf dem Bildschirm aus. 

Die nächste Unterroutine wird von 
SHRINK verwendet, um zwei Bytes in ei- 
nes zu verwandeln. Dies geschieht da- 
durch, daß nur jedes zweite Bit eines 
Bytes, also nur jeder zweite Punkt, ver- 
wendet und hintereinander in ein Byte hin- 
eingeschoben wird. 

TESTPART ab Zeile 672 fragt das einge- 
gebene Kommando dahingehend ab, wel- 
cher Bildschirmausschnitt verlangt wird. 
Es werden dann in PAR + 1 und PAR + 2 


Al® REM Kommandos zeigen 
420 TEXT : HOME 
430 & 


AGE 


(nur Quellcode; Objektcode s.u.) 


ORG $919® 


AGE — Applesoft-Grafik- 
Erweiterung 


von Klaus Schäfer 


vovoı91 AUuUDH 


EQU 
EQU 
EQU 
EQU 
EQU 
EQU 
EQU 
EQU 
EQU 
EQU 
EQU 
COUNT1 EQU 





grafik 4 


die X- und Y-Koordinaten der linken, obe- 
ren Ecke eines Ausschnitts gespeichert. 
Die Routine SHRINK ab 707 schließlich 
verkleinert eine Grafik-Seite auf ein Vier- 
tel. Es werden hier zwei geschachtelte 
Schleifen verwendet, die erste zählt die 
Zeilen des ganzen Bildes, die zweite die 
des verkleinerten. SHMER verkleinert 
dann zwei Bytes zu einem, und da nur 
jede zweite Zeile des Originalbildes ver- 
wendet wird, ergibt sich eine Verkleine- 
rung auf ein Viertel. 

WIDE (Zeile 826 ff.) kehrt die Wirkung von 
SHRINK genau um. Es wird hier ein Byte 
verdoppelt, indem jedes Bit doppelt ge- 
speichert wird, und jede Zeile des Aus- 
schnitts wird im Ergebnis zweimal ver- 
wendet. 


Kurzhinweise 


1. Zweck: 

Ampersand-Erweiterung der Grafik-Be- 
fehle in Applesoft. 

2. Konfiguration: 

Apple Il+, Ile oder Ilc; DOS 3.3 (kein 
ProDOS wegen HIMEM-Änderung). 

3. Test: 

RUN AGE.DEMO 

4. Sammeldisk: 

AGE.DEMO 
(Applesoft-Demo-Programm) 

T.AGE 

(Big-Mac-Quelltext) 

AGE 

(Maschinenprogramm). 


COUNT2 EQU $FC 

EQU $FE 

EQU $FF 

EQU $399 
AMPVEC EQU $3F5 
ERROR EQU $D412 
ADDON EQU $D998 
COMBYTE EQU $E74C 
GETBYTE EQU $E74F 
HPOSN EQU $F4ll 
COUT EQU $FDED 
* 
* Hier wird die Adresse des 
* Amper-Interpreters in den 
* Vektor von Page 3 gepokt. 
* 

LDA #$4C 

STA AMPVEC 

LDA #<START 

STA AMPVEC+l 

STA HIMEM 

LDA #>START 

STA AMPVEC+2 

STA HIMEM+1 

RTS 


* 
* Der Amper-Interpreter prüft 

* die Kommandos auf ihre Syntax 
* 

S 


TART BNE NORMCOM 
JMP HILFE 

NORMCOM LDX #$FF 
LDA #99 


31 





STA COMCOUNT ASC "'MERGE ' * Bestimmung der Anfangszeile 
* ASC "'<BUF>,<BUF>' . 
* Initialisierung der Pointer HEX 8D LDX PAR+2 
» ASC "SHOW <BUF>' STX Z1 
STARTLOl LDY +#$FF HEX 8D 
STARTLO2 INX ASC "SHRINK <BUF>' Bestimmung der letzten Zeile 
INY ASC "',<PART>' 
LDA COTAB1l,X HEX 8D CLC 
ASC "WIDE <BUF>' LDA 
wenn $2@, dann ist das Kommando ASC "',<PART>' ADC 
gefunden, weil alle Buchstaben HEX 8DFF LSR 
korrekt verglichen wurden. STA Z2 
Diese Tabelle enthält die . 
CMP_ #$20 Adressen der einzelnen Rou- * Bestimmung der momentanen Zeile 
BEQ GEFUNDEN tinen, die durch ein RTS * 
aufgerufen werden MIRRLOl LDX Z1 
Wenn das Ende der Kommando- JSR CALCCUR 
tabelle erreicht wird, wurde OTAB2 DA DREHEN-1 LDA HBASL 
das Kommando nicht gefunden. DA MIRROR-1 STA COUNTI 
DA INVERT-1 LDA HBASH 
CMP #$FF DA TAUSCH-1 STA COUNTI+1 
BEQ SYNERR DA KOPIEREN-1 LDY PAR+1 
DA MISCHEN-1 STY Ql 
Jetzt wird mit dem eingetippten DA ZEIGEN-1 LDY PAR+3 
Zeichen verglichen, .... DA SHRINK-1 DEY 
DA WIDE-1 STY 02 
CMP (TXTPNT),Y * 
BEQ STARTLO2 *--—-——--- ------. - 


| 
* 


Hier wird jedes Byte gespiegelt 
und von rückwärts wieder ein- 


wenn es nicht gleich ist, wird gesetzt. 


das nächste mögliche Komman- 
do verglichen. 


l. Grafik-Routine: Invert 


“*RrK KK 


Diese Routine invertiert den 
gewünschten Hires-Puffer. 


MIRRLO2 LDY Q1l 
LDA (COUNTl),Y 
JSR ROTATE 
PHA 
LDY Q2 
Der gewünschte Puffer- LDA (COUNTl),Y 
ausschnitt wird hier bestimmt JSR ROTATE 
LDY Ql 
NVERT JSR TESTBUF STA (COUNTl),Y 
Das Kommando wurde gefunden. JSR TESTPART PLA 
Jetzt wird die Adresse aus JSR CALCEND LDY Q2 
einer anderen Tabelle geholt, LDX PAR+2 STA (COUNTl),Y 
um die Routine anzuspringen. * INC Qıl 
* Jetzt wird die Adresse einer DEC Q2 
GEFUNDEN LDA COMCOUNT * Bildschirmzeile bestimmt. 
ASL * Zeile fertig? 
TAX INVLOl JSR CALCCUR 
LDA COTAB2+1,X LDA HBASL LDA Q1l 
PHA STA COUNTI CMP_ Z2 
LDA COTAB2,X LDA HBASH BNE MIRRLO2 
PHA STA COUNTI+1 


* 
* 
* 
* 
* 
STARTLO3 INX * 
LDA COTAB1l,X * 
* 
* 
* 
* 
I 


* ar 


CMP #$8D 

BNE STARTLO3 
INC COMCOUNT 
JMP STARTLOl 


* 
“ 
* 
* 
* 
* 


Ausschnitt fertig? 
Jetzt wird nur noch das Y-Reg. 


zum Textpointer addiert, damit 
Applesoft später mit dem 
nächsten Kommando fortfährt. 


Die Bildschirmzeile (49 Bytes 
lang) wird hier invertiert: INC Z1 
LDA Z1 
Bsp: #%1P@1@119 CMP PAR+4 
EOR #%@1111111 BNE MIRRLOl 
JSR ADDON = #7A11101091 
RTS 


“*AAKKKKKKKRK 


Diese kleine Routine lädt das LDY PAR+1 
X-Register mit dem Code für LDA (COUNT1),Y * 3. Grafik-Routine: Drehen 
den Syntax-Error und springt in EOR #$7F * 
die Applesoft-Fehlerroutine STA (COUNT1),Y * Diese Routine dreht den ge- 
INY * wünschten Hires-Puffer. 
LDX +#$1® 
JMP ERROR Ende einer Zeile? 


Diese Tabelle enthält die CPY PAR+3 * Hier wird wieder der Puffer und 
Namen der Kommandos, die be- BNE INVLO2 * der Ausschnitt eingelesen. 
liebig geändert werden können INX * 
DREHEN JSR TESTBUF 
ILFTABl HEX 8D Ende eines Ausschnitts? JSR TESTPART 
ASC "VERFUEGBARE " JSR CALCEND 
ASC "KOMMANDOS: '" CPX PAR+4 
HEX 8D8D BNE INVLOl In Z1 steht die Anfangszeile, 
COTABl ASC "TURN <BUF>' RTS 
ASC "',„<PART>' LDA PAR+2 
HEX 8D STA Z1 
ASC "REFLECT <BUF>' 
ASC ",<PART>' 2. Grafik-Routine: Spiegel 
HEX 8D 
ASC "INVERT <BUF>' Diese Routine spiegelt den 
ASC "',<PART>' gewünschten Hires-Puffer. 
HEX 8D STX Z2 
ASC "SWAP ' — CLC 
'<BUF>, <BUF>' LDA 
HEX 8D JSR TESTBUF ADC 
'COPY ' JSR TESTPART ROR 
'<BUF>, <BUF>' JSR CALCEND STA 
8D 


in Z2 die Endzeile 


LDX PAR+4 
DEX 


Eu Ze Ze u Ze 


| 
| 
| 
| 
| 
| 
| 
* 





S2 Peeker 1/86 









389 
381 





393 
394 
395 
396 


335 %* Zeilen durchgezählt. 
3356 %* 

3357 TURNLOl LDX Z1 

338 JSR CALCCUR 
339 LDA HBASL 
340 STA COUNTI 
341 LDA HBASH 
342 STA COUNTI+1 
343 LDX Z2 

544 JSR CALCCUR 
345 LDA HBASL 
346 STA COUNT2 
347 LDA HBASH 
348 STA COUNT2+1 


349 x* 

350 * Ql ist der Zähler für die mo- 
351 %* mentane Byte-Position in einer 
352 x* Zeile; Q2 ist das letzte Byte. 
355 %* 

354 LDY PAR+1 

355 STY Q1 

356 LDY PAR+3 

357 DEY 

358 STY 02 

359 %* 

360 & In dieser Schleife wird jede 
361 %* Zeile durchgezählt und gedreht 
362 %* 

363 TURNLO2 LDY Ql 

364 LDA (COUNT1l),Y 

365 JSR ROTATE 

366 PHA 

367 LDY Q2 

368 LDA (COUNT2),Y 

369 JSR ROTATE 

37 LDY Ql 

371 STA (COUNT1l),Y 

372 PLA 

373 LDY Q2 

374 STA (COUNT2),Y 

375 INC Q1 

376 DEC Q2 


Ende einer 


LDA 
CMP 
BNE 


INC 
DEC 


LDA 


399 CMP PAR+4 
391 BNE TURNLOl 
392 RTS 


* 


K--- 


* 


* Vorentscheidung: kopieren, * 
* verschmelzen oder tauschen * 


TAUSCH 


* In dieser Schleife werden die 


Zeile? 






Bildschirm(-ausschnitt) fertig? 






































Ql 
PAR+3 
TURNLO2 









z1 
22 














Z1 


* 









402 BNE SETFLAG 

403 MISCHEN LDA #2 

404 BNE SETFLAG 

405 KOPIEREN LDA #® 

ADd6 x* 

407 x In BYT1 wird festgelegt ob 
408 %* — Tausch, dann ]; 

409 x& — Mischen, dann 2; 

41® %* - Kopieren, dann ß. 

all x 

412 SETFLAG STA BYTl 

413 JMP COPY 

414 x 

4l5 _%*--------------- * 
416 x* 


417 x 4. Grafik-Routine: bewegt, 
418 x vertauscht oder verschmelzt 
419 & die beiden Grafik-Seiten. 
4220 x 


xrr%r* x 


* 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 

* 







* 
* Zuerst wird der Herkunft-Screen 
* bestimmt und in Ql abgelegt, 

* dann der Bestimmung-Screen, der 


Peeker 1/86 


* in Q2 abgelegt wird. 


* 
C 


C 
C 


C 
* 


* 
* 
* 
* 


C 


* 


OPT JSR 
CPX 
BEQ 
CPX 
BEQ 
LDX 
JMP 
LDA 
STA 
BNE 
LDA 
STA 
JSR 
CPX 
BEQ 
CPX 
BEQ 
LDX 
JMP 
LDA 
STA 
BNE 
OP5 LDA 
STA 
OP6 LDX 
STX 
OPYl LDX 


GETBYTE 
#] 
coPl 
#2 
coP2 
+$35 
ERROR 
+$29 
Ql 
COP3 
+$49 
ql 
COMBYTE 
#1 
COPA 
#2 
COP5 
+$35 
ERROR 
+$29 
Q2 
COP6 


Jetzt werden wieder die Basis- 
adressen der Herkunfts- und Be- 
stimmungszeile festgelegt. 


LDA 
STA 
JSR 
LDA 
STA 
LDA 
STA 
LDX 
LDA 
STA 
JSR 
LDA 
STA 
LDA 
STA 


Ql 

PAGE 
CALCCUR 
HBASL 
COUNT1 
HBASH 
COUNTI+1 
zl 

Q2 

PAGE 
CALCCUR 
HBASL 
COUNTZ2 
HBASH 
COUNT2+1 


Hier wird wieder jede Zeile 
entweder kopiert, vertauscht 
oder gemischt und im Zielpuffer 


abgelegt. 


LDY 
OPY2 LDX 
LDA 
CPX 
BEQ 
CPX 
BEQ 
EOR 
SEC 
BCS 
PHA 
LDA 
STA 
PLA 
STA 
INY 
CPY 
BNE 
INC 
LDA 
CMP 
BNE 
RTS 


+9 

BYT1 
(COUNT1),Y 
7") 

MOVE 

#1 

SWAP 
(COUNT2),Y 


MOVE 


(COUNT2) ,Y 
(COUNT1),Y 


(COUNT2) ,Y 


+40 
COPY2 
Z1 

Zz1l 
#192 
coPYl 


%-———— 


Unterroutine: Berechnung * 
der neuen Cursor-Position 


Diese Routine benutzt die Mo- 
nitor-HPOSN-Routine, die die 
Adresse einer Zeile berechnet 
die sich im A-Reg. befindet. 


ALCCUR TAXA 


* %* 


5. Grafik-Routine: schaltet * 
auf Hires-Seite <l> o. <2>. * 


“RK 


HGR oder HGR2? 


ZEIGEN JSR TESTBUF 
LDA PAGE 
CMP #$49 
BEQ SEITE2 


Ab hier werden nur noch die 
Softswitches betätigt: 


* 
5 
%* 
* 
* -— $c059 für Graphik 

* -— $Cc052 für volle Graphik 
* — $C057 für Hires-Graphik 
* — $0054 für 1. Seite 

* — $0055 für 2. Seite 

* 

S 


EITEl BIT $c0954 

JMP SWITCH 
SEITE2 BIT $c0955 
SWITCH BIT $cß5® 

BIT $c857 

BIT $c®52 

RTS 
* 
TEE 7 
* 
* Unterroutine: spiegelt 
* ein Byte 


* Hier wird ein einzelnes Byte 
* gespiegelt z.B. #$91 zu #$49 
* 
ROTATE LDX #9 
ASL 
BCC NOCARRY 
LSR 
ROL 
ROR 
DEX 
BNE 
LDA 
ORA 
RTS 
* 
NOCARRY LSR 
NCRLO ROL 
ROR 
DEX 
BNE 
LDA 
AND 


Unterroutine: testet, welcher x 
Puffer verlangt wurde (1/2). x 


“*RRrK KR 


“**xr + 


TESTBUF JSR 
CPX 
BEQ 
CPX 
BEQ 
LDX 
JMP 
LDA 
STA 
RTS 
LDA 
STA 


+ 


Hier wird nur der Puffer von 
dem Kommando eingelesen. 


GETBYTE 
#] 

BUFL1 

+2 

BUF2 
+$35 
ERROR 
+$20 
PAGE 


+$49 
PAGE 





33 





6. Routine: Hilfe — gibt die 
möglichen Kommandos aus. 


Diese Routine benutzt die 
normale Kommandotabelle, so 
daß jede Änderung eines Kom- 
mandonamens richtig angezeigt 
wird (z.B. TURN -> DREHEN) 


ILFE LDA #<HILFTABl 
STA COUNT 
LDA #>HILFTABl 
STA COUNTI+1 
LDY #9 

HILFLOl LDA (COUNTl),Y 
CMP_ #$FF 
BEQ HILFEX1 
ORA +#$89 
INY 
JSR COUT 
BNE HILFLOl 

%* 

HILFEXl RTS 

%* 


Km 


Unterroutine: verschmelzt 
zwei Bytes zu einen! 


Hier wird nur jedes zweite Bit 
eines Bytes erfaßt, so daß 

man zwei in einem zusammenfas- 
sen kann. 


SHMER LDX 
SHMERLO ROL 
ROL 
ROL 
DEX 
BNE SHMERLO 


* Unterroutine: Diese Routine * 
* testet, welcher Teil eines * 
Puffers verlangt wird. 


* Das ist recht einfach, da nur 
* die passenden X- und Y-Werte 
* gesetzt werden müssen. 


* 

TESTPART JSR COMBYTE 
STX PAR 
cCPX #4 
BEQ VIER 
CPX #3 
BEQ DREI 
CPX #2 
BEQ ZWEI 
cPX #1 
BEQ EINS 
CPX #9 
BEQ NULL 
LDX +#$35 
JMP ERROR 
NOP 
LDA #99 
STA PAR+Ll 
LDA #99 
STA PAR+2 
BEQ TPEX 
LDA #29 
STA PARH+l 
LDA #9 
STA PAR+2 
BEQ TPEX 
LDA #99 
STA PARH+l 
LDA #96 
STA PAR+2 
BNE TPEX 


34 


EEE 


ler! 
"u 
2] 
Ss 


„RK KK KH 


1/4-Puffer 


“*R KK 


un 
ri 
Pr," 
HH 
zZ 
I 


JSR 
JSR 
LDX 
STX 
LDX 
STX 
LDA 
EOR 
STA 
* 

* Wieder die 


7. Grafik-Routine: Shrink 
Diese Routine verkleinert 
einen ganzen Bildschirm zu 
einem Viertel-Bildschirm. 


| 
| 
* 


Pe 


Es wird wieder der Herkunfts- 
puffer sowie der Bestimmungs- 


festgestellt. 


TESTBUF 
TESTPART 
+9 

zl 

PAR+2 

z2 

PAGE 
+$69 
PAGE 


Feststellung der 


* Anfangsadresse 


* 

SHRINK1 LDA 
EOR 
STA 
LDX 
JSR 
LDA 
STA 
LDA 
STA 
LDA 
EOR 
STA 

* 


PAGE 
+$69 
PAGE 

21 
CALCCUR 
HBASL 
COUNT 
HBASH 
COUNTI+1 
PAGE 
+$69 
PAGE 


* sowie der Bestimmungsadresse 


* 
LDX 
JSR 
LDA 
STA 
LDA 
STA 
LDY 
STY 
LDY 
STY 


z2 
CALCCUR 
HBASL 
COUNT2 
HBASH 
COUNT2+1 
+00 

Ql 

PAR+1 

Q2 


In dieser Schleife wird jedes 
Byte zusammen mit einem anderen 
zu einem zusammengepreßt, und 
dann in den Zielpuffer 


übertragen. 


HRINK2 LDY 
INY 
LDA 
JSR 
DEY 
LDA 
ROL 
JSR 
LDY 
LDA 
STA 
INC 
INC 
INC 


Ende einer 


LDA 
CMP 
BNE 
INC 
INC 
INC 


Ql 


(COUNT1),Y 
SHMER 


(COUNT1),Y 


SHMER 

Q2 

BYT1 
(COUNT2),Y 
Ql 

Ql 

Q2 


Zeile? 


Ql 

+49 
SHRINK2 
Zzl 

Z1 

22 


Ende des Screens? 


LDA 
CMP 


Z1l 
#192 





BNE 


* %* 


Berechnet 


1/4-Puffers 


KRKKKKKKK KHK KR 


CALCEND LDA 
BEQ 
CLC 
LDA 
ADC 
STA 
CLC 
LDA 
ADC 
STA 
RTS 
LDA 
STA 
LDA 
STA 


* 7. Grafik-Routine: Hier wird 


* 1/4-Puffer 


* Screen vergrößert. 


* 


% nn. 


* 
* TESTBUF und 


SHRINK1 


Unterroutine: Calcend 


das Ende eines 


Viertel-Screens. 


In dieser Unterroutine werden 
die X- und die Y-Koordinate 
der rechten unteren Ecke eines 


festgestellt. 


PAR 
GANZ 


PAR+1 
+29 
PAR+3 


PAR+2 
+96 
PAR+4 


#40 


PAR+3 
#192 


zu einem ganzen 


„rar rt Kr 


* 


TESTPART stellen 


* wieder den Herkunft-1l/4-Screen 
* und den Bestimmung-Screen fest. 


* 

WIDE JSR 
JSR 

* 


TESTBUF 
TESTPART 


* Wieder Anfangszeile/Endzeile 


* 
LDX 
STX 
LDX 
STX 
LDX 
STX 

%* 

* Hier werden 


PAR+2 
zı 

+9 

z2 

+9 
BYT3 


wieder die Zeilen 


* durchgezählt. 


* 

WIDELl LDX 
JSR 
LDA 
STA 
LDA 
STA 
LDA 
EOR 
STA 
LDX 
JSR 
LDA 
STA 
LDA 
STA 
LDA 
EOR 
STA 
LDY 
STY 
LDY 
STY 


21 
CALCCUR 
HBASL 
COUNT 
HBASH 
COUNTI+1 
PAGE 
+$69 
PAGE 

z2 
CALCCUR 
HBASL 
COUNT2 
HBASH 
COUNT2+1 
PAGE 
+$60 
PAGE 
PAR+1 
ql 

+9 

Q2 


In dieser Schleife wird jede 
Zeile verdoppelt sowie jedes 
Byte ebenfalls bitweise verdop- 
pelt (z.B #$ß1 ->#$03) 


IDE2 LDY 
LDA 
JSR 
LDY 


Ql 
(COUNT1),Y 
WIDEIT 


Q2 





Peeker 1/86 





* 


INY 
LDA 
STA 
DEY 
LDA 
STA 
INC 
INC 
INC 


BYTl 
(COUNT2) ,Y 


BYT2 
(COUNT2) ,Y 
Ql 

Q2 

Q2 


* Ende der Zeile? 


* 


* 


LDA 
CMP 
BNE 
LDA 
BEQ 
INC 
LDA 
EOR 
STA 
INC 


Q2 
+40 
WIDE2 
BYT3 
NOINC 
Z1l 
BYT3 
#$01 
BYT3 
22 


* Ende des Screens? 


* 


* 
WIDEIT 


* 
WDITSUBl 
WDITLO1 


* 
WDITSUB2 


LDA 
CMP 
BNE 
RTS 


JSR 
LDX 
JSR 
JSR 
LDX 
JSR 
RTS 


LDY 
ASL 
PHP 
ROL 
PLP 
ROL 
DEY 
BNE 
RTS 


ASL 
PHP 
ROL 
PLP 
ROL 
RTS 


22 


WDITSUB2 
#9 
WDITSUB1 
WDITSUB2 
#1 
WDITSUB1 


BYT1,X 
BYT1,X 


WDITLO1l 


Der nächste 


Peeker 


Heft 2/1986 


erscheint 
am 20. 01. 1986 


Peeker 1/86 


AGE 


(Objektcode) 


BSAVE AGE, 


$9199: 
$9198: 
$911ß: 
$9118: 
$9129: 
$9128: 
$9139: 
$9138: 
$9149: 
$9148: 
$9159: 
$9158: 
$9169: 
$9168: 
$9179: 
$9178: 
$9189: 
$9188: 
$9199: 
$9198: 
$91AP: 
$9Y1A8: 
$91B®: 
$91B8: 
$91Cp: 
$I1c8: 
$91DB: 
$91D8: 
$91EB: 
$91ES: 
$91FBß: 
$Y1F8: 
$9299: 
$9298: 
$9219: 
$9218: 
$9229: 
$9228: 
$9239: 
$9238: 
$9249: 
$9248: 
$9259: 
$9258: 
$9269: 
$9268: 
$9279: 
$9278: 
$9289: 
$9288: 
$9299: 
$9298: 
$92A9: 
$92A8: 
$92BB: 
$92B8: 
$92c9: 
$92c8: 
$92D9: 
$92D8: 
$92EB: 
$92E8: 
$92FB: 
$92F8: 
$9309: 
59308: 
$9319: 
$9318: 
$9329: 
$9328: 
$9339: 
$9338: 


A9 
F6 
93 
94 
FF 
Fo 
Fo 
D® 
"r) 
DE 
19 
c6 
AB 
CF 
4E 
3C 
45 
42 
52 
52 
2C 
53 





A$919ß, 


ac 
93 
85 
A2 
E8 
15 
EF 
F8 
DA 
92 
ac 
D5 
CB 
D3 
29 
59 
46 
55 
54 
54 
3C 
57 
3E 
43 
46 
8D 
42 
46 
sc 
52 
46 
3E 
42 
52 
92 
93 
F3 
AE 
85 
03 
ce 
03 
39 
86 
03 
93 
FB 
93 
29 
20 
A4 
A5 
A5 
29 
94 
03 
6D 
FE 
A5 
93 
FD 
93 
29 
20 
A4 
A5 
FE 
D® 
92 
2B 
99 
12 


8D 
85 
74 
FF 
c8 
c9 
E8 
E6 
AA 
48 
12 
C5 
CF 
BA 
3C 
4l 
ac 
46 
3E 
20 
59 
al 
2C 
4F 
3E 
4D 
55 
3E 
42 
49 
3E 
8D 
55 
54 
IF 
B9 
93 
#2 
FA 
Bl 
#3 
Dp 
94 
FE 
4a 
A5 
AC 
88 
D6 
D6 
@1 
9 
FE 
F3 


F5 
73 
6B 
Ag 
BD 
FF 
BD 
90 
BD 
20 
DA 
c7 
CD 
8D 
42 
52 
45 
3E 
8D 
3C 
4l 
59 
3C 
50 
2C 
45 


L$P4BP 


93 
A9 
D® 
1%) 
6D 
Fo 
6D 
ac 
OF 
98 
8D 
62 
CD 
8D 
55 
54 
43 
Sc 
49 


A9 
91 
03 
85 
91 
21 
91 
IF 
92 
D9 
D6 
cl 
cı 
54 
46 
3E 
54 
3C 
4E 
55 
54 
3C 
55 
20 
42 
47 
2C 
48 
3E 
29 
59 
44 
a6 
FF 
93 
94 
94 
AE 
85 
7F 
FA 
29 
94 
03 
A6 
FA 





$9378: 
$9389: 
$9388: 
$9399: 
$9398: 
$93AB: 
$93A8: 
$93B9: 
$93B8: 
$93C9: 
$93C8: 
$93DB: 
$93D8: 
$93EB: 
$93E8: 
$93Fß: 
$93F8: 
$9499: 
$9408: 
$9419: 
$9418: 
$9429: 
$9428: 
$9439: 
$9438: 
$9449: 
$9448: 
$9459: 
$9458: 
$9469: 
$9468: 
$9479: 
$9478: 
$9489: 
59488: 
$9499: 
$9498: 
$94AAB: 
$94AAB8: 
$94BB: 
$94B8: 
$9ACcp: 
$94C8: 
$94DP: 
$94D8: 
$94EB: 
$94ES: 
$9Y4AFB: 
$94FB8: 
$9599: 
$9598: 
$951®: 
$9518: 
$9529: 
$9528: 
$9539: 
$9538: 
$9549: 
$9548: 
$9559: 
$9558: 
$9569: 
$9568: 
$9579: 
$9578: 
$9589: 
$9588: 
$9599: 
$9598: 
$95AB: 
$95A8: 
$9349: 
$9348: 
$935ß: 
$9358: 
$9369: 
$9368: 
$9379: 





35 





1. Programmbeschreibung 


Das Assemblerprogramm PROTODOS, 
das unter DOS 3.3 gestartet wird, kopiert 
Dateien von einer ProDOS-Diskette auf 
eine DOS-3.3-Diskette. Es setzt 2 Lauf- 
werke voraus, die an demselben Slot an- 
geschlossen sein müssen, d.h. eine Kopie 
von z.B. S4, D2 nach S6, D1 ist nicht 
möglich. 

Die zu übertragenden Dateien müssen 
sich im Volume-Directory (= Hauptinhalts- 
verzeichnis) der ProDOS-Diskette befin- 
den. Diese Beschränkung erfolgt aus 
Platzgründen: Eine Version, die zusätzlich 
das Präfix setzt und auf Subdirectories 
zugreift, wäre zu umfangreich für eine Ver- 
öffentlichung im Peeker. 

Das Gegenstück zu PROTODOS, nämlich 
DOSTOPRO, steht in „Apple ProDOS für 
Aufsteiger“, Bd. 2, S. 183ff. (Hüthig- 
Verlag). 


Die folgenden Dateitypen werden von 
dem Programm unterstützt: 


—  Applesoft-Programme: ProDOS- 
Dateityp BAS wird zum DOS-Dateityp A; 
— Binärdateien: ProDOS-Dateityp BIN wird 
zum DOS-Dateityp B, die Startadresse 
bleibt unverändert; 

— Systemdateien: ProDOS-Dateityp SYS 
wird zum DOS-Dateityp B und erhält die 
Startadresse $2000; 

— Textdateien: ProDOS-Dateityp TXT wird 
zum DOS-Dateityp T. 


Sequentielle Textdateien werden (bis auf 
das DOS-gerechte Setzen des höchst- 
wertigen Bit 7) unverändert und in beliebi- 
ger Länge übertragen. 

Was Random-Textdateien betrifft, hat 
PROTODOS eine Neuerung zu bieten: 
Dieser Dateityp kann ebenfalls übertragen 
werden, denn das Programm bricht nicht 
beim ersten leeren Record ab. Statt des- 
sen werden Random-Textdateien expan- 
diert, d.h. unbelegte ProDOS-Records er- 
scheinen auf der DOS-Diskette als leere 
Sektoren. 


2. Bedienungsanleitung 


Die „Benutzeroberfläche“ von PROTO- 
DOS orientiert sich sehr stark an dem 
bereits im Peeker, Heft 3/85, erschiene- 
nen Programm WS.TRANSFER von Dr. 
Jürgen Kehrel. Die notwendigen Schritte: 


— DOS 3.3 von Laufwerk 1 booten; 

- PROTODOS mit BRUN PROTODOS 
starten; 

—- Die ProDOS-Diskette in Laufwerk 2 ein- 
legen. 


36 


PROTODOS 


Konvertierung 


von ProDOS- in DOS-3.3-Dateien 


Zunächst erhalten Sie einen CATALOG 
des Volume-Directory der ProDOS-Dis- 
kette. Übertragbare Dateien sind dabei be- 
reits mit dem entsprechenden DOS- 
Dateityp gekennzeichnet. Als nächstes 
müssen Sie den Namen der zu übertra- 
genden ProDOS-Datei sowie den Namen, 
den diese Datei auf der DOS-Diskette ha- 
ben soll, eingeben. Wenn Sie anstelle ei- 
nes dieser beiden Namen nur ein <Re- 
turn> eingeben, beginnt das Programm 
von vorne. 

Nach einer Überprüfung, ob nicht bereits 
eine Datei mit dem angegebenen Namen 
auf der DOS-Diskette existiert (und ggf. 
entsprechender Rückfrage des Pro- 
gramms beim Benutzer), beginnt der 
Übertragungsvorgang. Wenn die Übertra- 
gung fehlerfrei abgeschlossen wurde, er- 
halten Sie danach einen CATALOG der 
DOS-Diskette. 


3. Grenzen des Programms 


PROTODOS benutzt diejenige Slotnum- 
mer, die beim Programmstart von DOS 3.3 
gesetzt wird. Damit wird eine zusätzliche 
Anfrage an den Benutzer umgangen. Der 
Transfer zwischen zwei verschiedenen 
Slots ist daduch allerdings nicht mehr 
möglich. 

Das Speichern eines Binärprogramms mit 
einer Länge von mehr als $7FFF Bytes ist 
unter DOS 3.3 ohne vorherigen DOS- 
Patch nicht möglich und ergibt einen 
RANGE ERROR. Erstaunlicherweise wer- 
den aber von PROTODOS geschriebene 
Binärdateien von DOS auch dann ohne 
Probleme geladen, wenn sie länger als 
$8000 Bytes sind. 

Die Expansion einer Random-Textdatei 
beansprucht u.U. viel Speicherplatz auf 


von Arne Schäpers 


der Diskette. Eine Datei mit einer Record- 
länge von 100 Bytes und einem einzigen 
tatsächlich belegten Record mit der Num- 
mer 1300 füllt eine normale DOS-Diskette 
(35 Spuren) vollständig. 


Hier wäre ein Ansatzpunkt für eine Erwei- 
terung des Programms: In dem sog. Auxi- 
liary-Information-Feld (AUX_INFO) des 
ProDOS-Dateieintrags findet sich bei einer 
Random-Textdatei die Recordlänge, mit 
der die entsprechende DOS-Datei über 
den File-Manager eröffnet werden könnte. 
Das Programm müßte beim Lesen der 
ProDOS-Datei danach jeden einzelnen 
Record prüfen und nicht-existente Re- 
cords auf der DOS-Diskette mit Hilfe des 
File-Manager-POSITION-Befehls über- 
springen. Allerdings ergibt sich dabei eine 
recht aufwendige Hin- und Herrechnerei 
im Programm. 


4. Programmtechnische Details 


Die meisten Teile des Programms sollten 
in ihrem Ablauf relativ einfach zu verfolgen 
sein. Einige Stellen bedürfen allerdings 
eingehenderer Erklärung bzw. sind „Kri- 
tisch“: 


Direkt-Modus: DOS prüft bei Befehlen 
und Eingaben, ob ein Applesoft-Programm 
läuft, und testet dazu die Zero-Page- 
Adressen $0033 (Prompt) und $0076 
(CURLIN = momentane Applesoft-Pro- 
grammzeilennummer). Falls diese Spei- 
cherstellen dieselben Werte wie im Direkt- 
Modus enthalten (Prompt = „U“ und 
CURLIN = $FF), behandelt DOS jede Ein- 
gabe wie einen direkten Befehl und würde 
z.B. auf eine Dateinamen-Eingabe CATA- 
LOG mit einem CATALOG reagieren. Das 


Peeker 1/86 


a ————————————————————————————————————————————————— EEE 





Setzen dieser beiden Speicherstellen ist 
ein eleganterer Weg als das „Abhängen“ 
von DOS. 


Volume-Directory: Nach der Meldung 
von RESTART wird das gesamte Volume- 
Directory (4 Blocks = $800 Bytes) von der 
ProDOS-Diskette eingelesen (Routine 
RDDIR) und danach über PRTDIR ausge- 
geben. Das Absuchen dieser vier Blocks 
nach (belegten) Einträgen (GET1ST und 
GETNXT) ist aus dem ProDOS-Urlader 
übernommen und ziemlich fehleranfällig. 
Jeder Eintrag hat eine Länge von $27 
Bytes, wobei der erste Eintrag beim 4. 
Byte ($004) des jeweiligen Blocks beginnt. 
Daraus folgt: Der letzte Eintrag innerhalb 
eines Directory-Blocks beginnt mit dem 
Byte $1D8 und endet mit dem Byte $1FE -— 
bei einer weiteren Erhöhung um $27 für 
den nächsten Eintrag verrechnet sich die 
Suchroutine, denn es kommt $1FF heraus. 
Hier steht in einem ProDOS-Directory- 
block immer der Wert $00, und die Such- 
routine „erkennt“ daraus „gelöschter Ein- 
trag“ und nimmt eine erneute Erhöhung 
des Pointers vor mit dem Ergebnis $026 
im nächsten Block, in dem die Einträge 
aber wieder mit dem 4. Byte beginnen. 


PROTODOS 


BSAVE PROTODOS, A$P803, L1584 


* 
- * PROTODOS * 
* 
%* 


ProDOS -> DOS 3.3 
* 
* Arne Schäpers 19/85 


co o_ı9 om Audre 


u 
MSGPNT 
PTR 
IOBPNT 
TEMP 

* 
WNDLFT 
CH 

cV 
PREG 

* 

IN 

* 

STYP 
EOF 
NAMBUF 
TWORK 
* 

* PAGE-3-VEKTOREN: 
* 

DOSCOLD EQU 
FMAN EQU 
RWTS EQU 
FMANLOC EQU 
RWTSLOC EQU 
* 


EQU 9 

EQU $95 
EQU $97 
EQU $99 


EQU 
EQU 
EQU 
EQU 


$20 
$24 
$25 
$48 


VD Hrr Hr 
SO ID AU DH US 


EQU $299 


EG) 
DH 


EQU $399 
EQU 
EQU 


EQU 


$339 
$369 


$3D3 
$3D6 
$3D9 
$3DC 
$3E3 


STYP+$15 


KRERKKHKTKTERTKT TI E K 


* 
* 
* 
* 
* 
* 


KRRRKKKKRTTKTT II HK ER 


Aus diesem Grund muß jeweils am Ende 
eines Blocks, also nach $200 Bytes ‚„von 
Hand“ nachkorrigiert werden. Der Test auf 
„innerhalb Block“ oder „nächster Block 
und Korrektur“ ist dabei von der Adresse 
abhängig, ab der das Directory geladen 
wurde. 


Index-Blocks: Über das Thema „Lesen 
einer ProDOS-Datei“ im Zusammenhang 
mit Master-, Index- und Datenblocks |lie- 
Ben sich ganze Bücher schreiben. Hier sei 
nur angemerkt, daß ein Masterblock die 
Blocknummern von Indexblocks enthält, 
die ihrerseits wiederum die Blocknum- 
mern der einzelnen Datenblocks einer 
Datei enthalten. Je nach Dateigröße be- 
steht eine ProDOS-Datei nur aus einem 
einzigen Datenblock (max. 512 Bytes), ei- 
nem Indexblock mit max. 256 Datenblocks 
(max. 256 * 512 Byte) oder einem Ma- 
sterblock, der max. 128 Indexblocknum- 
mern enthält. Die Blocknummer im Datei- 
eintrag zeigt immer auf den „höchstwerti- 
gen“ Block der Datei, d.h. bei kleinen 
Dateien direkt auf den einzigen 
Datenblock, ansonsten auf den Index- 
bzw. Masterblock. 


PTR für PRINT 
diverse Zwecke 
PTR auf IOB-Liste 
Scratch 


Textfenster links 
Curs. horizontal 
Curs. vertikal 
Bug-Fix (RWTS) 


Eingabe-Puffer 


ProDOS-Dateieintrag 
(3 Byte) 
DOS-Filename 
FMan-Workspace 


Kaltstart DOS 
FMan-Aufruf 
RWTS-Aufruf 
Adresse bestimmen 
Adresse bestimmen 


* DATEN/FILE-MANAGER-PUFFER: 


* 

TTSLIST EQU $oF@® 
TDBUF EQU $190® 
DIRBUF EQU $11®® 


Peeker 1/86 


TS-Puffer (FMan) 
Sec-Puffer (FMan) 
ProDOS-Directory 


D 
* 


KBD 


K 
* 
* 
” 


TEXT 
HOME 
RDKEY 
GETLN 


C 


PRBYTE 
COUT 


* 


* 


PROdos 94 


Skewing: In der Routine RDBLOCK wird 
zuerst aus der Blocknummer die Track- 
und Sektornummer ermittelt. Dabei kommt 
jedoch bereits die physikalische Sektor- 
nummer heraus. Da die RWTS von DOS 
intern eine Umsetzung von logischer nach 
physikalischer Sektornummer vornimmt 
(„Sektor Skewing“), muß diese Umset- 
zung vorher rückwärts vorgenommen wer- 
den, nämlich so, daß die RWTS nach der 
internen Umrechnung dann wieder den 
tatsächlich gewünschten Sektor liest. 


Kurzhinweise 


1. Zweck: 
Konvertierung von ProDOS- in DOS-3.3- 
Dateien 

2. Konfiguration: 

Apple II+/e/c; DOS 3.3 

3. Test: 

BRUN PROTODOS 

(von DOS-3.3-Diskette aus!) 

4. Sammeldisk: 

T.PROTODOS 

(Big-Mac-Quelltext) 

PROTODOS 4 
(Maschinenprogramm) 


TABUF EQU $15®® Datenpuffer-Start 
Tastatur 


Taste löschen 


EQU $coBp 
BSTRB EQU $cd1d 
MONITOR-AUFRUFE: 


$FB2F 
$FC58 
$FDÖC 
$FD6A 
$FDSE 
$FDDA 
$FDED 


EQU 24 * 40 Z 
EQU 
EQU 
EQU 
EQU 
EQU 
EQU 


1 Tast.-Zeichen 
l Tast.-Zeile 
<CR>-Ausgabe 
Byte ausgeben 
Zeichenausgabe 


ROUT 


ORG $9893 
LDA 
STA 
STA 
JSR 
LDA 
JSR 
JSR 
LDA 
STA 
LDA 
STA 
JSR 
HEX 
ASC 


+$AQ 
$33 
$76 
TEXT 
+$95 
COUT 
HOME 
+19 

CV 
+$06 
WNDLFT 
PRINT 
8D 
"PRODOS -> DOS-KONVERTER" 


PROMPT und 
CURLIN => 
"AP läuft" 
CHR$ (21) 
=> 80-Z aus 


VTAB #9 


"HTAB 5" 


BE A® C4A 
CE D6 C5 


8D8D 
"_ ARNE SCHÄPERS 19/85" 


C3 C8 DB 
Bl B®ß AF 


8D8D8Ddd 


WNDLFT zurück 


#309 
WNDLFT 





37 





0856: 
0859: 
B85B: 
085D: 
869: 
Ö861: 


0863: 
0865: 
B866: 


0868: 


DB6A: 
BBCC: 


BS6GE: 


0879: 
0873: 


0876: 


0879: 
B8TB: 
B87D: 
B889: 
881: 
0884: 


B88C: 


B88D: 
DSF: 


0892: 
BEA: 
BBA2: 
DBAA: 
B8BP: 
B8B2: 


B8B5: 
B8BD: 
B8C5: 
BSCD: 
B8D1: 
Q8D3: 


B8D6: 
ÖSDE: 
ÖSEBS: 
ÖSEE: 
Q8F5: 
B8FT: 
ÖSFA: 
ÖSFC: 
ÖSFF: 
0991: 
0993: 
0995: 
0997: 


DIBA: 
Ö9pD: 
B91B: 
B912: 
0915: 
0917: 


D91A: 


ß91D: 


Ö91E: 
0921: 
0929: 
B92F: 
0930: 
0933: 


0934: 
0936: 
0938: 
B93B: 
B93E: 
B949: 
0943: 
0945: 
D948: 


DIAA: 


BYAD: 


0955: 
B95D: 
0965: 
B96B: 


38 


20 2B BE 77 


AB BC 
Bl 97 
99 78 
88 
D® 
A5 
38 
E9 
E9 
29 
19 
A9 


F8 
#8 


8D 
29 


20 58 
85 
29 
8D 
cc 
c5 
AE 
8D 
c4 


25 
24 


C5 
CE 


8D 
c9 


Ad 
c4 
Ad 
D7 
8D 
c5 


D® 
c9 
c9 
C5 
8D 
c9 


C5 
D3 
CE 
D2 
8D 
BC 


A® 
CB 
A® 
CB 
8D 
D2 


58 
E4 
05 
32 
03 
9D 


24 


D2 
CF 


6A 
70 


9F 
C6 


AT 
F6 
24 
87 
cl 


D3 
D4 
c9 
D5 
8D 


C3 
C5 
03 


1) 


OD 


DA 
DA 


FC 


dB 
c7 
Ad 
c5 
D2 
D3 
CE 
D2 
CE 
c4 
c5 
cc 
AB 
c5 


D2 
c9 
AD 
Aß 
cp 


co 


03 


FC 
pc 


dc 
09 
QB 
CF 
D3 
ei 


FD 


dc 
dc 


dc 
dB 
cc 
c8 
c9g 


c8 
c4 


78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
99 
91 
92 
93 
94 
95 
96 
97 
98 
99 
109 
101 
192 
193 
D3 C9 


104 
195 


CF C4 
CB C5 
AB CC 
CB A® 
196 
197 


CF D3 
DA DA 
c1 D5 
Bl 
198 
199 


CE BE 
DA C5 
BC C5 
Cc5 CE 
119 
111 
112 
113 
114 
115 
116 
117 
118 
119 
129 
121 
122 
123 
124 
125 
126 
127 
128 
129 
AD CA 
CD C5 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
149 
141 
142 


c5 D2 
D4 D9 
DA A® 
C5 CE 
1435 


SETIOB 


* 
SETFRE 


* 


JSR 
LDY 
LDA 
STA 
DEY 
BNE 
LDA 
SEC 
SBC 
SBC 
AND 
BPL 
LDA 


STA 
JSR 


GETIOB 
#$0C 
(IOBPNT),Y 
IOB,Y 


SETIOB 
IOBPNT+1 


+$21 
#<DTABUF 
+$FE 
SETFRE 
+$89 


FRESPC 
CRCONT 


IOB-Adresse 
RWTS-Parms 
kopieren 

wg. Slotnummer 


Bestimmung des 
freien Platzes 

-> norm. = $96(PP) 
Daten-Start 

-> Geradzahl 

wenn < $80@0 Byte 


Datenpuffergröße 
"RETURN -> Weiter" 


KERRRRERRRRRRTRTTT TR 


* RESTART NACH TRANSFER x 


KRERKKRERKTTTTTTT EI 


* 
RESTART 


C5 AE AE 


CF 
D4 
cl 
B2 


D3 
D4 
D5 


AD 
C5 
C6 


AD 
C5 
C6 


c4 
Ad 
D7 


c9 
c9 
c5 


Ad 
D2 
D3 
c4 


BD 
Ad 
c3 
c5 


A® 
Ad 
BE 


GETCR1 


* 
NEWDSK 


ERRVEC 
* 
GETPN 


C1 D4 C5 
BA 


SCANDIR 


AD CA Cl 
D® AF CE 
07 C5 C6 
Al 


JSR 
LDA 
STA 
JSR 
HEX 
ASC 


HEX 
ASC 


HEX 
ASC 


HEX 
ASC 


HEX 
LDA 
BPL 
STA 
CMP 
BEQ 
CMP 
BNE 
JMP 


JSR 
JSR 
BCS 
JSR 
BCC 
JMP 


JSR 
HEX 
ASC 


HEX 
JSR 
TXA 
BEQ 
STA 
JSR 
JSR 
BEQ 
JSR 
BNE 
JSR 
HEX 
ASC 


HEX 


HOME 


VTAB 11 


"LEGEN SIE..." 


8D8D 


"DIE PRODOS-DISKETTE 
IN LAUFWERK 2" 


8D8D 


"EINE DOS-DISKETTE 
IN LAUFWERK 1" 


8D8D 
"<RETURN> 
= ENDE" 


8DPP 
KBD 
GETCRl 
KBSTRB 
+$8D 
NEWDSK 
#+$9B 
GETCRl 
DOSCOLD 


HOME 


RDDIR 
ERRVEC 
PRTDIR 
GETPN 


ERROR 


PRINT 
8D 


= WEITER 


<ESC> 


das hier ist 
der einzige 
reguläre Ausgang 


<ESC>? 


liest ProDOS-DIR 
=> Lesefehler 
druckt CATALOG 
DIR nicht leer 


"PRODOS-DATEINAME: '" 


09 
GETLN 


RSTVEC 
TEMP 
GET1ST 
CMPNAME 
GOTPN 
GETNXT 
SCANDIR 
PRINT 
8D87 


Eingabe Dateiname 
Eingabe-Länge 

=> nur <CR> 
Namenslänge 
Vergleich mit 
ProDOS-Einträgen 


nächster Eintrag 
Loop bis DIR-Ende 


BELL 


"FALSCHER DATEITYP/ 
NICHT GEFUNDEN!" 


8DPP 


Q96D: 
0979: 
0973: 
0975: 
0978: 
0979: 


BI7TB: 
BITE: 
B9TF: 
0982: 
DIA: 
B98D: 
B98E: 
0991: 
0992: 
0994: 
0997: 
0999: 
BB: 


B99D: 
D9AB: 
BYA3: 
B9AB: 


B9A9: 
BYAC: 
DYAF: 
B9BB: 
B9B3: 
QÖ9BB: 
B9C1: 
094: 
BSCC: 
B9DA: 
Ö9D6: 
B9D7: 
D9DA: 
BSDC: 
Ö9DE: 
ÖIEB: 
B9E3: 
BIES: 
DIES: 
DIEB: 
Ö9ED: 
B9FB: 
B9F3: 
BÖYF6: 


B9F8: 
B9FB: 
ÖYFE: 
DABl: 
DADA: 
DABT: 
DAQg: 
DABC: 
DADE: 
DAI1®: 
DAl2: 
BAl5: 
DAI1B: 
DAIB: 
QBAID: 
QAIF: 
BA21: 
DA2A: 
DA2T: 
DAZA: 
DA2D: 


DARF: 
DA3B: 
DA32: 


DA33: 
BASE: 
DA38: 
DASB: 
QA3D: 
DAAD: 
DAA3: 
DAB: 
DAA9: 


20 


011) 
11) 
W10) 


29 
Fo 
29 
BP 
EE 
EE 
EE 
EE 
20 


1A 
23 
05 
11) 


F8 
24 
CF 
c4 
C5 
6A 


12 
44 


d6 
5B 


24 
8D 
AE 
76 


96 
24 


DB 


99 
11 


B3 


OB 


D3 
cl 
BA 


FD 


dB 


OB 
"") 


08 


DB 
dB 


DA 
Ad 
D2 
c5 
c3 
Ad 


FD 


FD 
FD 
#9 


FD 
FD 
dB 


03 
dB 
dB 
dB 
dB 


dB 


03 
03 
03 


dB 
03 
03 
dB 


DA 
OD 


DA 
DA 
DA 
DA 
DA 


144 
145 
146 
147 
148 
149 
159 
151 
152 
153 

DA C5 


154 
155 
156 
157 
158 
159 
169 
161 
162 
163 
164 
165 
166 
167 
168 
169 
179 
ı71 
c5 D8 
D4 AE 
172 
c8 D2 
AB CA 


173 
174 
175 
176 
177 
178 
179 
18® 
181 
182 
183 
184 
185 
186 
187 
188 
189 
199 
191 
192 
193 
194 
195 
196 
197 
198 
199 
200 
201 
202 
203 
204 
205 
206 
207 
2908 


209 
219 


21l 
212 
213 
214 
215 
216 
217 
218 
219 
220 
221 
222 
223 
224 
225 
226 
227 


JMP GETPN => neue Eingabe 
GOTPN LDY DIRBUF+$23 Eintragslänge 
GOTP1 LDA (PTR),Y Kopie des 
SITA STYP,Y gefundenen Eintrags 
DEY aus dem ProDOS- 
BPL GOTPl1 Directory 
* 
GETDN JSR PRINT 
HEX 8D 
ASC "DOS-DATEINAME: " 
Cc9 CE Cl 
HEX 99 
JSR GETLN 
TXA Eingabe-Länge 
BEQ RSTVEC nur <CR> 
JSR OPEN OPEN DOS-Datei 
BCC GETOV => existiert bereits 
CMP +#$@6 FILE NOT FOUND? 
BEQ MAKEFL wenn ja: o.k. 
. 
ERROR JSR PRINT 
HEX 8D8DP® 
JSR CRCONT "RETURN = Weiter" 
RSTVEC JMP RESTART 
* 
GETOV JSR CLOSE kein Disk I/O 
JSR PRINT 
HEX 8D 
ASC "DATEI EXISTIERT. " 
C9 D3 D4 
Ad 
ASC "ÜBERSCHREIBEN (J/N): " 
c5 C9 C2 
AF CE A9 
HEX 09 
GTOl JSR RDKEY "3" oder "I" 
AND #$DF => Großbuchstabe 
CMP _ #'"N" 
BNE GTO2 
JSR COUT "N" ausgeben 
JSR CROUT + <CR> 
JMP GETDN -> neuer DOS-Name 
GTO2 CMP 4 #"J" 
BNE GTOl 
JSR COUT "J" ausgeben 
JSR CROUT + <CR> 
JSR DELETE Datei löschen 
BCS ERROR 
” 
MAKEFL LDA STYP+$19 ProDOS-Filetyp 
JSR GETTP2 => DOS-Filetyp 
LDA DTYPES,Y 
STA DOSTYP 
JSR CREATE erzeugt Datei 
BCS ERROR 
LDA DOSTYP 
BEQ MOVE -> TEXT 
CMP_ #$02 
BEQ WRLEN A: nur Länge 
LDX STYP+$1F BIN/SYS: Start- 
LDY STYP+$29 adresse 
LDA STYP+$1® ProDOS-Filetyp 
BPL WRSTART -> ist BIN-Datei 
LDX #$09 SYS-Datei: Start 
LDY +#$29 auf $2099 
WRSTART JSR WRI16 schreibt Startad. 
WRLEN LDX EOF 
LDY EOF+Ll Dateilänge 
JSR WRI16 schreibt Länge 
BCC MOVE "always" 
* 
a ee 
* MOVER LOOP x 
a ee 
. 
DADDR DFB #<DTABUF Datenstart 
RDCOUNT DA vpP® gelesene Bytes 
FRESPC DFB ® Datenpuffergröße 
* 
* 
MOVE JSR SETRD setzt DSTART+TSTEOF 
BEQ RDDONE -> EOF BB 00 BB 
JSR RDIST liest 1.Block 
BCS RDDONZ Disk-Fehler 
RWLOOP INC DADDR Zieladresse + $299 
INC DADDR 
INC RDCOUNT+1 Anzahl gelesene 
INC RDCOUNT+1 Bytes +$209 
JSR TSTEOF EOF überschritten? 


Peeker 1/86 


BAAC: 
BAAE: 
BA51: 
DAS5A: 


BASE: 
BAS59: 
BASB: 


PASD: 
DA6P: 
DA63: 
DAGE: 


BA69: 
BAEC: 
DAGF: 
BA72: 
DAT5: 
DATB: 
BA79: 
BATB: 
DATC: 
DATF: 
BABl: 
DAB2: 
BAB5: 
BABT: 
DABA: 


BASC: 
DABF: 
BA91: 
DA9YA: 
BASE: 
BA99: 
QAAG: 
DAA2: 
BAA5S: 
BAAB: 
BAAB: 


DAAE: 
QABl: 
QABA: 
DABE: 
DABBS: 
QABB: 
QABE: 
BACE: 
BACC: 
BACD: 
QADB: 
BAD2: 
QADS: 
QADT: 
BAD: 


QADA: 
BADC: 
QDADF: 
BAER: 
DAEA: 
BAET: 
BAER: 
AED: 
DAF®: 


BAFl: 
DAFA: 
DAFS5: 
DAFB: 
BAFY: 
DAFC: 
DAFF: 
BBBB: 
BBP3: 
BBB5: 


BBde: 
BBß8: 
DBBA: 
BBOC: 
ÖBOF: 
ÖBll: 
BBl2: 
BBl4A: 


99 
AD 
CD 


BO 


20 
99 
BO 


AD 
8D 
AD 
8D 


20 
8E 
sc 
8D 
AD 
38 
E9 
AA 
AD 
E9 
A8 
20 
B® 
20 
D® 


29 
B® 
29 
8D 
c3 
ei 
8D 
ac 
20 
20 
ac 


29 
8D 
Ag 
85 
20 
BC 
DA 
D7 
a0 
AD 
19 
8D 
c9 
DP 
69 


Ag 
8D 
8D 
A9 
8D 
AD 
dD 
AD 
69 


AD 
38 
ED 
AA 
AD 
ED 
A8 
AD 
E9 
69 


Ad 
Bl 
Ad 
D9 
F® 
88 
D® 
69 


Peeker 1/86 


ÖF 
31 
52 
13 


26 
E2 
48 


15 
39 
16 
31 


Fl 
15 
16 
17 
30 


91 


31 


DD 
lE 
DA 
CA 


96 
17 
24 
84 
c1 
cc 
7) 
A8 
96 
AE 
76 


24 
8D 
99 
24 
24 
D2 
D5 
C5 


v1) 
FB 
19 
8D 
FA 


JV) 
39 
31 
15 
2F 
15 
16 
17 


15 
3ß 


16 
Sl 


17 
n® 


1® 
95 
94 
15 
03 


F8 


DA 
DA 


dD 


03 
DA 
93 
DA 
DA 
93 
93 


DA 


DA 


dB 
DA 


BB 
dB 


DA 
CF 


DA 
OB 


DA 
98 


dB 
u) 


DB 
C5 
D2 
c9 
c9 


c9 


DA 
DA 


DA 
93 
03 
03 
3 
DA 


B3 
DA 


03 


dB 


228 
229 
230 
231 
232 
233 
234 
235 
236 
237 
238 
239 
240 
241 
242 
243 
244 
245 
246 
247 
248 
249 
259 
251 
252 
253 
254 
255 
256 
257 
258 
259 
269 
261 
262 
Cc7 AC 
263 
264 
265 
266 
267 
268 
269 
278 
271 
272 
273 
274 
275 
276 
277 
278 
CE BE 
DA C5 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289 
29 
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
31® 
311 
312 
313 
314 
315 


NXTRD 


LIMIT 


* 
REWRITE 


RDDONE 


CA Bl 


RDDONZ 
RDQUIT 


* 


BCC 
LDA 
CMP 
BCS 


JSR 
BCC 
BCS 


LDA 
STA 
LDA 
STA 


JSR 
STX 
STY 
STA 
LDA 
SEC 
SBC 
TAX 
LDA 
SBC 
TAY 
JSR 
BCS 
JSR 
BNE 


JSR 
BCS 
JSR 
HEX 
ASC 


HEX 
JMP 
JSR 
JSR 
JMP 


LIMIT 
RDCOUNT+1 
FRESPC 
REWRITE 


RDNEXT 
RWLOOP 
RDDONZ 


EOF 
RDCOUNT 
EOF+1 
RDCOUNT+1 


TSTEOF 
EOF 
EOF+1 
EOF+2 
RDCOUNT 


#+$01 


RDCOUNT+1 
#509 


WRITE 
RDDONZ 
SETRD 
NXTRD 


CLOSE 
RDQUIT 
PRINT 
8D84 





-> ja 

max. $8000 I 
Puffergröße 

-> Puffer voll 


nächster Block 


EOF überschritten. 
Begrenzung auf 
den EOF für WRITE 


EOF — RDCOUNT 
= verbleibende 
Anzahl von zu 
lesenden Bytes 


FMan-Angabe ist 

l weniger als 

die tatsächliche 
Anzahl der zu 
schreibenden Bytes! 


schreibt X-Y Byte 
-> FMan-Fehler 
RDCOUNT auf ® 
falls EOF noch > ® 


vor(!) CATALOG 
bei Fehler 


<CR>, Control-D 


"CATALOG,DI1" 


8DPB 
RDQUIT 
CLOSE 
CRCONT 
RESTART 


kein 2. CLOSE 


"RETURN = Weiter" 


das war's 


KEKREKEKEKKKKHHKHKKTK THE EEK EHE KH 


* 


Unterprogramme 


* 


FRKKKERKEKEHKFRKFK TFT KH FE HE KH ER 


” 
CRCONT 


Aß BD A® 
D2 


GETCR2 


SETRD 


* 
TSTEOF 


* 
GETTYP 


GETTP2 
GTT1 


GOTTYP 


JSR 
HEX 
LDA 
STA 
JSR 
ASC 


HEX 
LDA 
BPL 
STA 
CMP 
BNE 
RTS 


LDA 
STA 
STA 
LDA 
STA 
LDA 
ORA 
ORA 
RTS 


LDA 
SEC 
SBC 
TAX 
LDA 
SBC 
TAr 
LDA 
SBC 
RTS 


LDY 
LDA 
LDY 
CMP 
BEQ 
DEY 
BNE 
RTS 


PRINT 
8D8SDYP 
+09 

CH 
PRINT 


""<RETURN> 


BB 

KBD 
GETCR2 
KBSTRB 
+$8D 
GETCR2 


+09 
RDCOUNT 
RDCOUNT+1 
#>DTABUF 
DADDR 
EOF 

EOF+l 
EOF+2 


EOF 


RDCOUNT 


EOF+1 
RDCOUNT+1 


EOF+2 
+00 


+$19 
(PTR) ,Y 
+$94 
PTYPES,Y 
GOTTYP 


GTzı 


HTAB ®8 


WEITER" 


wartet auf 
ein RETURN 


setzt RDCOUNT 
zurück, Adresse 
für den nächsten 


Datenblock 
und Test auf 


EOF = dB GB BB 


Test, ob RD- 
COUNT > restliche 
Bytes im File 


High-Byte 


Filetyp aus 
DIR-Eintrag. 
Heraussuchen 

der unterstützten 
ProDOS-Filetypen. 
DOS-Filetyp 
zuordnen 





Jetzt purzeln die Preise! 
ZUSATZ-KARTEN: 





V-24-Schnittstelle ............ 199,- Z-80-Karte ................. 98,- 
80-Zeichen-Karte m.Softswitch 236,- 16K-Language-Karte ......... 98,- 
JoyStickDeluxe ............ 59,- Accelerator3,6 MHz ......... 950,- 
68000 Intemex ............ 1600,- PALKarte ..........2........ N0,- 
RGBKarte ................. 239,- IEEEABB......... 222222... 312,- 
Koppler dataphon m. FTZ..... 325,- Z80BKarte mit Software ...... 919,- 
Centronics-Karte von Epson für Graphik... . 210,- für Text... .145,- 
a für 2 Drucker gleichzeitig. FREE 129,- 


uper-Eprommer 


Su keinen ep incl. Software für 2716-27128 


-Controller 


Bausatz wie links 





FDC 4 für alle Laufwerke PP . 169,- 


Leerplatine wie oben incl. Prom u. Eprom 


Erphi-Controller 


Drucker-S Spooler 64. kB, 


fertig aufgebaut incl. Netzteil u. Gehäuse 


Preh Commander Keyboards 


Wir bieten Ihnen die Preh-Qualität auch für Apple. AK 88 Spez. mit Gehäuse, An- 
schlußkabel, Zehner-Tastenfeld, dt. Zeichensatz, ee für 
Ctrl-Codes und Rechenfunktionen 


Preh Commander Keyboard, frei programmierbar 
bis zu 10 Ebenen, pro Taste bis zu250 Zeichen .............. nur 599, = 





TEAC 3%" Laufwerk FD er 


Speicherkapazität 1 MB, (formatiert 640 KB) jetzt für nur 


Ke 





3 7 


TEACFD55 AV 1x40 Track .... 395,- TEACFD55 BV2. x 40 Track 2... 460,- 
TEAC FD 55 EV 1 x 80 Track . 445,- TEACFD5S5FV2x80 Track .... 449,- 
Apple®-kompatibles Laufwerk incl. Gehäuse + Kabel ................ 599,- 


320 KB Laufwerk für lic : 
640 KB Laufwerk für IIc................ 1088,- 


EPSON DRUCKER 


EPSON FX80................ 1670,- EPSON FX 100 
EPSONRX80 ....-..-......- 1079,- EPSON RX 80 FT 


Die Microfloppy mit Zukunft: 


Speicherkapazität: 2 x 1 MByte formatiert: 2 x 
640 kByte. Anschlußfertig mit PROM-residenter 
Patchsoftware für CP/M 2.2, Apple DOS 3.3, Di- 
versiDOS 2-C, 4-C (DD MOVER), Apple Pascal 
1.1, Pascal 1.2, Pro-DOS 1.0.1, 
1.1, 1.1.1 zum Preis von 
Low Power Version 


10 MB Winchester 


mit Software für DOS 3.3, CP/M 2.20, Pascal, Pro-DOS, 3990 
incl. Controler und Gehäuse . . 22... 22 mn n nenn... — 


Sonderangebot 
Chinon Laufwerk SE jez 9, 





incl. Kabel u. Gehäuse 


Gesamt-Preisliste anfordern! Preise inclusive gesetzlicher Mehrwertsteuer. 
Händlerpreisliste bitte schriftlich anfordern! 


8 Ze] NICH-1/-Targelslle- 


DFÜ 02373/66877 
Tel. 02373/63159 


Holtewiese 2 
5750 Menden | 











@B15: 
ÖB18: 
QBlA: 
ÖB1D: 
ÖBIF: 
QB22: 


QB24: 
QB25: 
0B27: 
QB28: 
OB2A: 
BB2C: 
PB2E: 
OB39: 
0B33: 
0B34: 
BB36: 
BB37: 
0B38: 
DB3A: 
QB3B: 
@B3D: 
ÖB3F: 
QBAB: 
QB4l: 
0B42: 


QB43: 


®B44: 


®B46: 


QB49: 
BBAC: 


®BAD: 
BB5ß: 
0B53: 
BB56: 
0857: 
0B58: 
0B59: 


QB5A: 


OB5D: 
OB5F: 


ÖB6l: 


QB64: 


0B67: 
@B69: 
OBEB: 
BEE: 
ÖBEF: 
BB7l: 


0B72: 
0B75: 
0B78: 
®B79: 


OBTB: 
QB7D: 
ÖBTE: 
@B81: 


0B83: 
0B85: 
0B87: 
QB88: 


0B89: 


BBSC: 
ÖBSE: 
BB9P: 
0B93: 
0B35: 


®B96: 
0B98: 
BOB: 
BBSD: 
ÖBSE: 
BBAB: 
QBA3: 
QBA5: 


40 


es Ss Sn ec 


1") 
06 
FF 
04 
Ad 
c2 


68 
85 


85 
Ad 
Bl 
Fo 
20 
c8 
Dp 
18 
98 
65 
A8 
AS 
69 
48 
98 
48 
69 


A9 
AA 


99 
c9 
DO 
38 
69 


8D 
Ag 
A2 
29 
BP 
69 


04 FC 
FF 
dB 02 
94 
DA Cı1 
62 


1) 


91 
Bl 
v1) 
#6 
ED FD 


F6 


1) 


Q1 
1") 


90 
23 PC 
22 9C 


21 GC 


24 GC 
79 ®D 


00 92 
30 93 


F7 
o1 
FA @B 


05 
d6 


26 BC 


FA @B 


02 
FA @B 
#9 


5 
FA OB 
#1 


316 
317 


318 
319 


320 
321 
322 
323 
324 
325 
326 
327 
328 
329 
330 
331 
332 
333 
334 
335 
336 
337 
338 
339 
349 
341 
342 
343 
344 
345 
346 
347 
348 
349 
359 
351 
352 
353 
354 
355 
356 
357 
358 
359 
369 
361 
362 
363 
364 
365 
366 
367 
368 
369 
37 
371 
372 
373 
374 
375 
376 
377 
378 
379 
380 
381 
382 
383 
384 
385 


386 
387 


388 
389 
390 
391 
392 
393 
394 
395 
396 
397 
398 
399 
400 
401 
402 
403 
404 


. 
PTYPES 


DTYPES 
DCHARS ASC 


* 


" TABB" 


DFB 9,4,$FC,6,$FF TXT/BAS/BIN/SYS 


DFB $FF,9,2,4,4 X/T/A/B/B 


* PRINT ROUTINE nach Andy Hertzfeld... 


* 

PRINT PLA 
STA 
PLA 
STA 
LDY 
LDA 
BEQ 
JSR 
INY 
BNE 
CLC 
TYA 
ADC 
TAY 
LDA 
ADC 
PHA 
TYA 
PHA 
RTS 


PRT1 


PRTZ 


* 


aka aaa 
* FILE MANAGER-AUFRUFE * 
aka aka aka aka 


* 
DOSTYP 
* 

OPEN 


DFB 


LDY 
STY 
STY 
INY 
STY 
STY 
LDA 
LSR 
LSR 
LSR 
LSR 
STA 
LDA 
LDY 
STA 
STY 


LDY 
LDA 
STA 
DEY 
BPL 
DEX 
LDA 
STA 
DEX 
BPL 


CLRNAME 


MVNAME 


LDA 
TAX 
JSR 
BCC 
CMP 
BNE 
SEC 
FOPEN RTS 


* 
” 

CREATE STA 
LDA 
LDX 
JSR 
BCS 


RTS 


CLOSE LDA 
JSR 
BCS 
RTS 
LDA 
JSR 
BCS 


RTS 


DELETE 


MSGPNT 


MSGPNT+1 
#$01 
(MSGPNT) ,Y 
PRTZ 

COUT 


PRT1 


MSGPNT 


MSGPNT+1 
#509 


® 


+$09 
TVOLNO 
TRECLEN+1 


TRECLEN 
TDRIVE 
IOB+1 

A 

A 

A 

A 

TSLOT 
#>NAMBUF 
#+NAMBUF 
TNAME+1 
TNAME 


+39 
#+$A9 
NAMBUF , Y 


CLRNAME 


IN,X 
NAMBUF, X 


MVNAME 
+$01 


CALLFMAN 
FOPEN 
#+$06 
FMERR 


TTYPE 
#501 
#509 
CALLFMAN 
FMERR 


#92 
CALLFMAN 
FMERR 


#05 
CALLFMAN 
FMERR 


Returnadresse 
zeigt auf den 
auszugebenden 
Text selber 


<dd> = 


Textende 


der ausgegebene 

Text wird über- 

sprungen (Erhö- 

hung der Return- 
adresse) 


DOS-Dateityp 


Volume-Nummer 
Recordlänge High 


=> $0pp1 
Drive 1 
RWTS-Slotnummer 


/ 16 


Adresse des 
Dateinamens 


Der Dateinamen- 
bereich wird 
auf '" " gelöscht 


und der einge- 


gebene Name wird 
hineingeschrieben 


Kommando: OPEN 
=> kein CREATE 
=> Datei existiert 


-> nicht NOT FOUND 


DOS-Filetyp 
Kommando: OPEN 
CREATE erlaubt 


Kommando: CLOSE 


Kommando: DELETE 


QBAG: 
QBAT: 
QBAA: 
ÖBAC: 
ÖBAF: 
QBB7: 
QBBA: 
QÖBBB: 
ÖBBC: 
ÖBBF: 
BBC2: 
QBC3: 


BBCA: 
BBC6: 
BBC9: 
ÖBCB: 
ÖBCE: 
BD: 
BBD3: 
ÖBD5: 
QBD8: 
QBDA: 


ÖBDD: 
ÖBEP: 
OBE3: 
QBES5: 
BET: 
BEA: 
BED: 
ÖBEF: 
ÖBF2: 
QBFA: 
BÖBF7: 
ÖBF9: 


QBFA: 
ÖBFD: 
BcpB: 
dc92: 
BCpA: 
ÖCd6: 
dcB9: 
DCBB: 
BCHC: 
ÖCBE: 
dc1l: 
C13: 
BC15: 
dc18: 
dC19: 
ÖC1B: 
CIE: 


dc21: 
d023: 
ÖC24: 
0C25: 


BC27: 


BÖC2B: 
BC2D: 
ÖC2F: 


9032: 
0034: 
BC37: 
ÖC3A: 
ÖCSC: 
ÖC3F: 
BC4l: 
DC4AA: 
BCAC: 
dCc5B: 


48 
20 
8D 
c6 
CE 
BA 
0 
68 
29 
29 
38 
69 


84 
8E 
A9 
8D 
A9 
29 
A5 
8D 
A9 
ac 


8D 
20 
85 
84 
AB 


91 
88 
19 
20 


Bl 
99 
88 
19 
AD 
69 


91 
9 
Pl 
D6 


59 


6B 
BP 
np 


A9 
8D 
29 
Dp 
29 
8D 
c4 
c5 
c5 
8D 


24 
87 
CD 
AD 
Ad 


DA 
8E 


93 


93 
OF 
10 


8D 
31 
9F 
18 
24 
87 
c9 
c3 
c5 
7) 


dB 
cl 


c6 
A4 


FD 
FD 


BC 


BC 


dB 


BC 


dB 


BC 
BC 


dc 
BC 
dc 
dB 


dc 
#3 


BC 


03 


BC 


dc 


BC 
BC 


DB 
D2 


D4 
D2 


405 
406 
407 
408 
409 
c5 C8 


419 
all 
412 
413 
414 
415 
416 
417 
418 
419 
420 
421 
422 
423 
424 
425 
426 
427 
428 
429 
430 
431 
432 
433 
434 
435 
436 
437 
438 
439 
440 
441 
442 
443 
444 
445 
446 
447 
448 
449 
450 
451 
452 
453 
454 
455 
456 
457 
458 
459 
460 
461 
462 
463 
464 
465 
466 
467 
468 
469 
470 
471 
472 
473 
474 
475 
476 
477 
478 
479 
489 
481 
482 
483 
484 
485 
486 
487 
488 
489 
490 
CF D2 


491 


cc c5 D2 


WR16 


WRITE 


* 
* 
CALLFMAN 


SETFMAN 


GETFMAN 


* 
OPCODE 
SUBCODE 
TRECLEN 
TVOLNO 
TDRIVE 
TSLOT 
TTYPE 
TNAME 
RTNCODE 


u 
TWRNUM 
TWRADDR 
* 


PHA 
JSR 
HEX 
ASC 


HEX 
PLA 
JSR 
JSR 
SEC 
RTS 


STY 
STX 
LDA 
STA 
LDA 
JSR 
LDA 
STA 
LDA 
JMP 


STX 
STY 
LDA 
LDY 
STA 
STY 
LDA 
STA 
LDA 
JSR 
BCS 
RTS 


STA 
JSR 
STA 
STY 
LDY 
LDA 
STA 
DEY 
BPL 
JSR 
LDY 
LDA 
STA 
DEY 
BPL 
LDA 
RTS 


DS 
DS 
DA 
DFB 
DFB 
DFB 
DS 
DA 
DS 
DA 
DA 
DA 


EQU 
EQU 


PRINT 
8D87 


Fehlernummer 


"FMAN-FEHLER: $" 


99 


PRBYTE 
CROUT 


TEMP 
TNAME 
#01 
SUBCODE 
+04 
CALLFMAN 
TEMP 
TNAME 
+504 
CALLFMAN 


TWRNUM 
TWRNUM+1 
#+>DTABUF 
+9 
TWRADDR+1 
TWRADDR 
+$02 
SUBCODE 
+$04 
CALLFMAN 
FMERR 


OPCODE 
FMANLOC 
PTR+1 
PTR 

#$11 
OPCODE,Y 
(PTR),Y 


SETFMAN 
FMAN 
#$11 
{PTR).Y 
OPCODE,Y 


GETFMAN 
RTNCODE 


2 


1 
$oH91 
d 

o1 

d6 

1 
NAMBUF 
2 
TWORK 
TTSLIST 
TDBUF 


TSLOT 
TNAME 


druckt Hexzahl 
<CR> danach 


WR16 schreibt 
zwei Byte, dabei 
findet kein 
Disk-I/0 statt 
-> 1. Byte 


2. Byte 


schreibt X-Y Byte 
in die DOS-Datei 


Daten werden ab 
DTABUF geschrieben 
=> WRITE RANGE 


schreibt RANGE 


Aufruf mit OPC 


-> zur Parmliste 


Parmliste wird 
in FMan kopiert 


FMan-Aufruf 


Rückkopie der 
FMan-Parmliste 


Carry unverändert! 


Recordlänge 
Volume-Nummer 
Drive 1 

aus RWTS gesetzt! 
DOS-Filetyp 
Startadresse Name 


Workspace 
$1ß0 Bytes 
$190 Bytes 


für WRITE RANGE 
für WRITE RANGE 


er 
* ProDOS-Directory lesen & absuchen * 
ek 


* 
CRFLAG 
* 
PRTDIR 


D9 AB CC 


DS 


LDA 
STA 
JSR 
BNE 
JSR 
HEX 
ASC 


HEX 


l 


#+$8D 
CRFLAG 
GETIST 
PRTENT 
PRINT 
8D87 


<CR> oder CHR$ (128) 


PTR -> 1. Eintrag 


"DIRECTORY LEER!" 


8DAP 


Peeker 1/86 





0052: 38 
BC53: 69 


BC54: 29 
ÖC56: AA 
dC57: 20 
ÖC5A: B9 
ÖC5D: 29 
dc6ß: A9Y 
dC62: 20 
BC65: AB 
dC67: Bl 
ÖC69: 99 
ÖCc6EB: 29 
ÖC6E: C8 
ÖC6EF: CA 
dCc7®: DB 
ÖCc72: A9 
dC74: 85 
ÖC76: 29 
dC79: 29 
ÖC7C: D® 
ÖCTE: 29 
ÖC8l: 18 
ÖC82: 69 


BC83: AD 
Öc86: 49 
ÖC88: 8D 
ÖCc8B: 29 
ÖC8E: C9Y 
ÖCc99: DP 
ÖC92: A5 
BC94: C9 
dC96: 9 
dC98: 29 
ÖC9B: 29 
CIE: 69 


ÖCYF: A9 
dCAl: 85 
BCAS: A9 
BcAS: DP 


CAT: A5 
BCA9: 18 
BCAA: 6D 
CAD: A8 
ÖCAE: 99 
ÖCBß: E6 
ÖCB2: A5 
BCBA: AA 
ÖCB5: 99 
ÖCB7T: C9 
ÖCB9: F® 
ÖCBB: A® 
ÖCBD: 84 
ÖCBF: A® 
ÖCCl: Bl 
dCc3: FB 
ÖCC5: 69 


BCcc6: 29 
BCC8: C5 
ÖCCA: D® 
ÖCCC: A8 
ÖCCD: AA 
ÖCCE: CA 
ÖCCF: Bl 
ÖCD1: 99 
ÖCD3: DD 
ÖCD6: D® 
ÖCD8: 88 
ÖCD9: DP 
ÖCDB: 29 
ÖCDE: B9 
ÖCEL: 29 
ÖCE3: 69 


ÖCEA: A9 
ÖCES: 85 
BCES: A9Y 
ÖCEA: A2 
ÖCEC: Aß 
ÖCEE: 29 
ÖCFl: BB 
ÖCF3: AD 


Peeker 1/86 


05 
80 
0) 
dB 


F3 
d6 
1A 
Fö 


94 
09 
11 
02 
1") 
85 


8l 


dB 
FD 


FD 


FD 


BC 
BC 


dc 


BC 


dc 
FD 


DA 
FC 


dB 
dB 





492 
493 
494 
495 
496 
497 
498 
499 
599 
501 
592 
503 
504 
505 
596 
507 
598 
509 
519 
511 
512 
513 
514 
515 
516 
517 
518 
519 
529 
521 
522 
523 
524 
525 
526 
527 
528 
529 
530 
531 
532 
533 
534 
535 
536 
537 
538 
539 
549 
541 
542 
543 
544 
545 
546 


548 
549 
559 
551 
552 
553 
554 
555 
556 
557 
558 
559 
569 
561 
562 
563 
564 
565 
566 
567 
568 
569 
579 
571 
572 


574 
575 
576 
577 
578 
579 
580 
581 
582 


+ 
PRTENT 


PRTNAM 


DOCR 


CRDONE 
* 
* 
GET1IST 


* 
GETNXT 
GTN1 


SETPTR 


GOTENT 
u 


* 
CMPNAME 


CMPLOOP 


NOTSAME 
* 

* 

* 

RDDIR 


RDD1 


SEC 
RTS 


AND 
TAX 
JSR 
LDA 
JSR 
LDA 
JSR 
LDY 
LDA 
ORA 
JSR 
INY 
DEX 
BNE 
LDA 
STA 
JSR 
JSR 
BNE 
JSR 
CLC 
RTS 


LDA 
EOR 
STA 
JSR 
CMP 
BNE 
LDA 
CMP 
BCC 
JSR 
JSR 
RTS 


LDA 
STA 
LDA 
BNE 


LDA 
CLC 
ADC 
TAY 
BCC 
INC 
LDA 
LSR 
BCC 
CMP 
BEQ 
LDY 
STY 
LDY 
LDA 
BEQ 
RTS 


AND 
CMP 
BNE 
TAY 
TAX 
DEX 
LDA 
ORA 
CMP 
BNE 
DEY 
BNE 
JSR 
LDA 
AND 
RTS 


LDA 
STA 
LDA 
LDX 
LDY 
JSR 
BCS 
LDA 


#$@F 


GETTYP 
DCHARS, Y 
COUT 
#$A9 
COUT 
+$01 
(PTR) ,Y 
+$89 
COUT 


PRTNAM 
+20 

CH 
DOCR 
GETNXT 
PRTENT 
DOCR 


CRFLAG 
+$0D 
CRFLAG 
COUT 
#+$8D 
CRDONE 
CV 

#19 
CRDONE 
CRCONT 
HOME 


#>DIRBUF 
PTR+1 
+$94 
GTN1 


PTR 
DIRBUF+$23 


SETPTR 
PTR+1 
PTR+1 
A 
SETPTR 
#$9C 
GOTENT 
+504 
PTR 
+$99 
(PTR) ,Y 
GETNXT 


#+$0F 
TEMP 
NOTSAME 


(PTR) ,Y 
+$80 
IN,X 
NOTSAME 


CMPLOOP 
GETTYP 
DTYPES,Y 
#$FQ 


+$94 
TEMP 
#>DIRBUF 
+$92 
#509 
RDBLOCK 
DIREND 
RDADDR+1 


=> kein einziger 
Eintrag vorhanden 


=> Namenslänge 


ProDOS-> DOS-Filetyp 
" " 7 A, B 


Space danach 


Ausgabe des 
Dateinamens 


Zähler für Länge 


zwei Einträge 

pro Zeile, CR 

nach jedem 2.Eintrag 
nächster Eintrag 

bis DIR-Ende 


"Toggle'": einmal 
wird CHR$(128), 
danach wieder <CR> 
ausgegeben 

war <CR>? 


über Zeile 
28 hinaus? 


"RETURN = Weiter" 


holt den 1. 
besetzten Eintrag 
nach Vol-Name 
"always! 


holt folgende 
Einträge aus DIR 
Eintragslänge 


neuer Block? 


-> innerhalb Block 
DIR-Ende/2 
-> DIR-Ende 
nächster DIR-Block 


Test 1.Byte 

des Eintrags: 
-> BB: gelöscht 
"NE": Eintrag 


Aufruf mit 1.Byte 
des Eintrags 
Längen ungleich 


Vergleich DIR- 
Eintrag mit 
eingegebenem 
Dateinamen und 


Test auf gültigen 
Dateityp für 
Konversion 

< $ßF, wenn o.k. 
-> EQ, wenn o.k. 
"EQ"': gefunden 


4 Blocks 
Herunterzähler 
Zieladresse High 


Block $9992 


-> RWTS-Fehler 
wurde erhöht 


Prccs 49 MERLIN 


von Glen Bredon 


Der professionelle Macro-Assembler für 
die Apple Il-Familie! 
Neben allen Standard-Features bietet 


MERLIN u.a.: 


komfortabler Editor mit globalen 
Such- und Ersetzfunktionen 

liest und schreibt DOS 3.3 Text- und 
Binärfiles 
unterstützt 6502- 
Opcodes 
beinhaltet eine Bibliothek mit fertigen 
Unterprogrammen 

enthält einen Disassembler mit eige- 
ner Label-Bibliothek 

kompatibel mit vielen 80-Zeichen- 
karten und natürlich mit Apple //e 


und Apple //c 


und 65C02- 


Jetzt mit deutschem Handbuch! 


ISBN 3-89058-024-6 DM 198, 


Bei Ihrem Apple-Händler, in guten Buch- 
handlungen, oder direkt vom Verlag: 


Ampersand*, Teltower Damm 168, 
D-1000 Berlin 37, (030) 815 80 69 


*vormals Pandabooks 
EEE EE EM EM Beselkoupor HH BB BE 


Name 


Anschrift 


O V-Scheck liegt bei (spesenfreie Lieferung) 
O per Nachnahme (zzgl. DM 3,— Versandspesen) 


Ex. MERLIN  &DM 198,- 


41 








BCF6: 
ÖCF9: 
ÖCFC: 
ÖCFD: 
ÖCFF: 
BD®1: 


ßDB2: 
PDP3: 


DPA: 
BDp6E: 
BDP9: 
ÖDIC: 
ÖDPF: 
ßD12: 
ßD15: 
0D17: 
®D19: 
ÖDI1B: 
ÖDID: 
ÖDIF: 
®D21: 
BD24: 


PD26: 
0D29: 
ÖD2B: 
ÖD2E: 
®D31: 
0D34: 
®D35: 
BD37: 
PD3A: 
ÖDSC: 
ÖD3F: 
ßD41: 
ÖD44: 
®D4A7: 
ÖDAA: 
DAB: 
ÖDAE: 
ßD51: 
D53: 
BD56: 
BD59: 
BDSC: 
PD5E: 
PDEl: 
PD63: 
ßD65: 
BD67: 
ßD69: 
PDEB: 
BDED: 
ÖDEE: 
dD79: 
9D72: 
0D73: 
0D75: 


0D76: 


0D78: 
ÖD7A: 
ODTB: 
BD7C: 
D7D: 


ÖD8P: 


®D84: 


BD85: 
D88: 
ÖD8B: 
ÖDSE: 
DB: 
dD91: 


42 


AE 76 PD 583 
AC 77 0D 584 


E8 
c6 99 
D® ED 
69 


u) 
11) 


A9 DB 
8D 92 
8D 93 
AE 11 
AC 12 
AD 99 


c9 19 
FO 39 
c9 29 


A9 11 
20 85 
Bß 4AF 


AE 93 
Dp 19 
AE 92 
BC 99 
BD 99 


A9 13 
20 85 
Bö 39 
EE 92 
A2 99 
8E 93 
BC 99 
BD 99 


AD 2F 
20 85 
Bß 22 
EE 3 
AD 76 
BD 77 
Fö 17 
AC 43 
Dp 12 
84 95 
A2 92 
Bl 95 
09 80 
91 95 


E6 96 


D® F2 


pD 99 


1 69 
@1 
B9 
1") 
1") 


90 11 
01 


8E 76 
8Cc 77 
8D 81 
85 96 


ßD 76 


dD 
BD 
93 
93 
03 


BD 


DD 
DD 
12 
11 
AD 
PD 
BD 
13 


DA 
dD 


BD 
dD 
dD 


BB 


BD 
öD 


dD 


585 
586 
587 
588 
589 
599 
591 
592 
593 
594 
595 
596 
597 
598 
599 
6% 
6P1 
692 
603 
604 
695 
696 
607 
608 
699 
619 
611 
612 
613 
614 
615 
616 
617 
618 
619 
629 
621 
622 
623 
624 
625 
626 
627 
628 
629 
630 
631 
632 
633 
634 
635 
636 
637 
638 
639 
649 
641 
642 
643 
644 
645 
646 
647 
648 
649 
659% 
651 
652 
653 
654 
655 
656 
657 
658 
659 
669 
661 
662 
663 
664 
665 
666 
667 
668 
669 
679 
671 
672 
673 


LDX 


INX 

DEC 

BNE 
DIREND RTS 
” 


* 


BLOCKNO 
BLOCKNO+1 


TEMP 
RDD1 


nächster Block 


FERKKKRRRFEKKRTE TFT I 


* PRODOS-DATEI EINLESEN 


* 


FRRRKKKKTETKTKTT TH EEE 


* 


MINDEX DFB ® Index im Master 
IINDEX DFB ® Index im Index 
* 
RD1ST LDA #9 liest 1.Block 
STA MINDEX Master-Index 
STA IINDEX Index-Index 
LDX STYP+$11 
LDY STYP+$12 Nummer 1.Block 
LDA STYP 
AND #$F® => Storage Type 
CMP +#$19 
BEQ TYPEIl nur 1 Datenblock 
CMP #$29 
BEQ TYPE2 1 Indexblock 
LDA #>DIRBUF 
JSR RDBLOCK Master-Block 
BCS RDEND in DIR-Bereich 
* 
RDNEXT LDX IINDEX Index im Index- 
BNE RDDATA Block: wenn => 
LDX MINDEX dann nächster 
LDY DIRBUF+$1@®,X Indexblock 
LDA DIRBUF,X -> Blocknumnmer 
TAX 
TYPE2 LDA #>DIRBUF+$29® 
JSR RDBLOCK Indexblock 
BCS RDEND 
INC MINDEX Index im Master 
LDX +#$99 
STX IINDEX Index im Index 
RDDATA LDY DIRBUF+$309,X 
LDA DIRBUF+$209,X 
TAX Blocknummer 
TYPEl LDA DADDR Zieladresse 
JSR RDBLOCK 
BCS RDEND 
INC IINDEX Index-Index+tl 
LDA BLOCKNO war das ein 
ORA BLOCKNO+l1 leerer Block? 
BEQ RDEND -> kein SETMSB 
LDY DOSTYP TXT-Datei? 
BNE RDEND 
STY PTR PTR+1l ist gesetzt 
LDX +#$92 
SETMSB LDA (PTR),Y TXT: MSB wird 
ORA #$89 innerhalb des 
STA (PTR),Y Blocks gesetzt 
INY 
BNE SETMSB 
INC PTR+l 
DEX Zähler: $2@® Byte 
BNE SETMSB 
RDEND RTS 


* 
* 


een 
* ProDOS-Blockread via RWTS « 
BR 


* 


BLOCKNO DA $p00B ProDOS-Block 
* 
IOB HEX #169 Type + Slotx16 
DRIVE DFB 91 
VOLNO DFB 9® Volume-Nummer 
TRACK DFB 99 
SECTOR DFB 98 
DS 2 DCT-Pointer 
RDADDR DA DIRBUF READ-Zieladresse 
DS 2 Sector Count 
IOBCMD DFB #1 Kommando: 


* 


READ 


KERKRKKRRRTHHHH HIHI HH KH KK KK KK 


* 
RDBLOCK STX 
STY 
STA 
STA 
TYA 
ORA 


BLOCKNO 
BLOCKNO+1 
RDADDR+1 
PTR+1 


BLOCKNO 


Aufruf mit Blockno 


in X(Low), Y(High) 
f. SETMSB, CLRBLK 


Blockno = ß9 99? 


BD94: 
ßD96: 
0D97: 
®D99: 
ÖDSB: 
ÖD9D: 
ÖDYE: 
DAB: 
BDA2: 
QDA3: 
PDAS5: 
ÖDAG: 


BDAT: 
ÖDAA: 
QDAB: 
ÖDAD: 
ÖDAE: 
ÖDBl: 
ÖDB2: 
ßDBA: 
ßDB5: 
ÖDB7: 
ÖDB8: 
ÖDBB: 


ÖDBE: 
GDCP: 
PDC3: 
dDC6E: 
BDC7: 
dDCA: 
ÖDCB: 
PDCE: 
ÖDD1: 
ÖDD3: 
ÖDD6: 
ÖDD9: 
PDDB: 
ÖDDD: 
ÖDDF: 
ÖDE2: 
ÖDES: 
DET: 
ÖDEA: 


ÖDEB: 
DEE: 
ÖDFP: 
ÖDF3: 
DFB: 
ÖDFE: 
ÖDFF: 
dEP1: 
dEB3: 
BEBE: 
DEB9: 
DEBA: 


DEBB: 
BEPBE: 


dEI3: 
BEIG: 
BEIB: 
BEIB: 
DEID: 
BEIE: 
DE2B: 
DE23: 
DE2B: 
BE28: 
DERA: 


DEZB: 
DEZE: 
DE3PB: 
DE32: 


8C 7C ®D 


2E 7C ®D 


29 9F 

8D 7D PD 
2 13 BE 
Bo 94 

EE 81 @D 
69 


20 24 @B 
8D 87 

D2 D7 DA 
D3 AD C6 
BA AB A4 
0) 

Ad BD 

Bl 97 

20 DA FD 
20 SE FD 
38 

6% 


DD OD MB 
99 97 05 


20 2B ®E 
AB GC 

BI 78 PD 
91 97 

88 

DO F8 

20 E3 3 
20 D9 93 
A9 99 

85 48 

69 


20 ES 93 
84 07 

85 98 

69 


1584 Bytes 


674 
675 


" 676 


677 
678 
679 
68% 
681 
682 
683 
684 
685 
686 
687 
688 
689 
699 
691 
692 
693 
694 
695 
696 
697 
698 
699 
798 
781 
782 
783 
784 
785 
706 
787 
798 
799 
719 
Til 
712 
713 
714 
715 
716 
77 
718 
719 
728 
ai 
722 


05 C8 CC C5 D2 


723 
724 
725 
726 
127 
728 
729 
73® 
731 
03 91 
7132 
733 
734 
735 
736 
737 
738 
739 
749 
741 
742 
743 
744 
745 
746 
747 
748 


CLRBLK 


XLATE 


SETTRK 


* 
RDERR 


» 
RETRANS 


u 
RDSEC 


MVIOB 


* 
GETIOB 


BNE 
TAY 
STY 
LDX 
STA 
INY 
BNE 
INC 
DEX 
BNE 
CLC 
RTS 


STY 
TXA 


ASL 
ROL 
DEY 
BNE 
TXA 
AND 
TAX 
LDA 
STA 


LDY 
STY 
STY 
INY 
STY 
INY 
STY 
JSR 
BCS 
INC 
LDA 
SBC 
ADC 
AND 
STA 
JSR 
BCS 
INC 
RTS 


JSR 
HEX 
ASC 


HEX 
LDY 
LDA 
JSR 
JSR 
SEC 
RTS 


DFB 


JSR 
LDY 
LDA 
STA 
DEY 
BNE 
JSR 
JSR 
LDA 
STA 
RTS 


JSR 
STY 
STA 
RTS 


XLATE 
PTR 
+$02 
(PTR) ,Y 


CLRBLK 
PTR+1 


CLRBLK 


TRACK 
#395 

A 
TRACK 
SETTRK 


#+$97 


RETRANS,X 


SECTOR 


#309 
VOLNO 
RDADDR 


IOBCMD 


DRIVE 
RDSEC 
RDERR 
RDADDR+1 
SECTOR 
+01 

137]0) 
#+$0F 
SECTOR 
RDSEC 
RDERR 
RDADDR+1 


PRINT 
8D87 


= 9 
$290 Bytes löschen 


nicht belegte 
Blocks ("sparse") 
werden gelöscht 


Blockno High 
Blockno Low 


5 Shifts links 
=> Teilung / 8 


Blockno Low 


-> phys. Sektorno 
für RWTS: Zurück- 
übersetzen! 


Volume-Nummer 99 
Zieladresse Low 
Kommando: READ 
Drive 2 

liest 1. Sektor 


—> RWTS-Fehler 
Zieladresse+$19® 


0DB97531 
wird zu: 
ECA86A2F 
-> 2. Sektor 
liest 2.Sektor 


"RWTS-FEHLER: $" 


u) 
#13 


(IOBPNT),Y 


PRBYTE 
CROUT 


Fehlernumnmer 
<CR> danach 


0,$D,$B,9,7,5,3,1 rückwärts 


GETIOB 
#$0C 
IOB,Y 


(IOBPNT),Y 


MVIOB 
RWTSLOC 
RWTS 
#309 
PREG 


RWTSLOC 
IOBPNT 
IOBPNT+1 


setzt IOBPNT 


lädt Y-A 
RWTS-Aufruf 
Bug-Fix 


lädt Y-A 


Peeker 1/86 





Designer 


Zeichensatz-Generator in Apple-Pascal 


von Gabor Herr 





Wenn Sie zu den Programmierern gehö- 
ren, die vergeblich versucht haben, in Ap- 
ple-Pascal im Grafikmodus einen deut- 
schen Text mit Umlauten auf den Bild- 
schirm zu bringen, oder den mitgelieferten 
Zeichensatz einfach langweilig finden und 
sich künstlerisch betätigen möchten, dann 
ist dieses Programm genau richtig für Sie. 


1. Zeichendarstellung in Pascal 


Im Gegensatz zu Applesoft-BASIC ist es 
in Pascal möglich, Strings oder Texte mit 
Hilfe der beiden Befehle „Wchar“ und 
„Wstring“ im Grafikmodus auf dem Bild- 
schirm auszugeben. Wie funktionieren 
nun diese beiden Prozeduren? 


In der Turtlegraphics-Unit wurde die An- 
weisung „Drawblock“ implementiert, mit 
deren Hilfe sich eine Punktmatrix auf dem 
Grafikbildschirm darstellen läßt. Wurde 
z.B. eine 10x10-Punkte große Matrix in 
einem Feld, das folgendermaßen dekla- 
riert wurde: 


Bild: 


Packed Array (1..10,1..10) of Boolean 
abgelegt, so kann es mit 


Peeker 1/86 


= = BRERUTE 


Drawblock (Bild, 2, 0, 0, 10, 10, 5, 20, 10) 
auf den Hires-Bildschirm ausgegeben 
werden. Die Matrixpunkte werden vom 
Pascal-System als Bits in Bytes zusam- 
mengefaßt und in der Variablen „Bild“ ab- 
gespeichert. Beim Aufrufen der Prozedur 
„Drawblock“ werden diese Bytes zeilen- 
weise in den Grafikspeicher kopiert. Des- 
halb muß als zweiter Parameter die Anzahl 
der Bytes, die zur Darstellung einer Zeile 
nötig sind, angegeben werden. Die für den 
Kopiervorgang benötigten Daten werden 
durch die folgenden Parameter bestimmt: 


Drawblock (Matrix, Bytes, xs, ys, w, h, x0, 
y0, Mode) 


Matrix: Variable, die die Punktmatrix ent- 
hält 

Bytes: Anzahl der Bytes ((w+15) div 16) 
*2 

xs, ys: Anzahl der Punkte, die bei der 
Darstellung in x- bzw. y-Richtung über- 
sprungen werden sollen 

w, h: Breite und Höhe der Matrix 

x0, yO: Koordinaten der Bildschirmposition 
(linke untere Ecke der Matrix) 

Mode: Modus wie bei Chartype (z.B. 10 
für „Kopiere Array“) 


ucsd er 


Bei der Darstellung von Texten greifen 
„Wchar“ und „Wstring“ auf diese Proze- 
dur zurück. Sie verwenden für jedes Zei- 
chen eine 8x8-Punktmatrix. Der Zeichen- 
satz enthält 128 Zeichen und ist nach dem 
bekannten ASCIl-Code aufgebaut. Es 
wurden lediglich die Ctrl-Zeichen durch 
Grafiksymbole z.B Apfelzeichen, 
Schachfiguren usw.) ersetzt. Die Zeichen- 
muster sind in einem Feld zusammenge- 
faßt und in einer Datei unter dem Namen 
„SYSTEM.CHARSET“ auf der Diskette 
„APPLE1“ abgelegt. Bei der Initialisierung 
der Turtlegraphics-Unit wird der Zeichen- 
satz in den Arbeitsspeicher geladen, wo er 
während der Programmausführung auch 
bleibt. Mit Hilfe des „Designers“ istes nun 
möglich, diese oder eine genauso aufge- 
baute Datei zu laden, die einzelnen Zei- 
chen zu editieren und sie dann wieder 
abzuspeichern. 


2. Bedienung des Programms 


Das Programm ist menügesteuert, ähnlich 
wie das Pascal-System. Bei der Eingabe 
der folgenden Kommandos dürfen Sie 
kleine und große Buchstaben verwenden: 


L(oad: Laden eines Zeichensatzes von 
der Diskette. Ist die gesuchte Datei nicht 
vorhanden oder hat sie nicht das passen- 
de Format, so wird die Fehlermeldung 
„Datei fehlt“ ausgegeben. 

S(ave: Speichern des aktuellen Zeichen- 
satzes auf der Diskette. Eine schon beste- 
hende Datei mit dem gleichen Namen wird 
überschrieben. Deshalb geben Sie nur 
dann „SYSTEM.CHARSET“ ein, wenn da- 
von bereits eine Sicherheitskopie existiert. 
N(eu: Löschen des Speichers. Nach der 
Eingabe dieses Kommandos werden Sie 
gefragt, ob nur das angezeigte Zeichen (= 
C(har), oder der ganze Zeichensatz (= 
A(lle) gelöscht werden soll. 

V(erify: Das aktuelle Zeichen wird neben 
der Matrix auch in Originalgröße darge- 
stellt. 

Q(uit: Beenden des Programms 

+, -: Das folgende bzw. vorangehende 
Zeichen wird zum Editieren auf dem Bild- 
schirm angezeigt. Diesem Kommando 
kann ein Faktor (2-127) vorangestellt wer- 
den. Die Eingabe „30+" würde beispiels- 
weise die Zeichenposition um 30 Zeichen 
vorrücken. 

Leertaste: Mit Hilfe der Leertaste kann ein 
Punkt in der Matrix gesetzt bzw. gelöscht 
werden. 


Die Ebenen Save, Load und Neu können 
bei falschen Eingaben mit der „ESC“-Ta- 
ste verlassen werden. Die Tastenbele- 
gung für die Kursorsteuerung ist durch 
Konstanten (cu_l, cu_r... usw.) im Deklara- 


43 








tionsteil festgelegt. Die im Listing abge- 
druckten Zahlen beziehen sich auf einen 
Apple Ile; für andere Apple-Typen können 
sie leicht abgeändert werden. 


3. Beispiel 


Nach dem Starten des Programms er- 
scheint auf dem Monitor ein großes Qua- 
drat für die Darstellung der Matrix und eine 
Zeile mit den Kommandos. Gibt man die 
Anweisung „L“ für Load und dann „xSY- 
STEM.CHARSET“ ein, so wird der Stan- 


dard-Zeichensatz geladen. Nach dem 
Drücken der „+"-Taste erscheint das er- 
ste Zeichen, hier das „Apple“-Symbol, 
vergrößert auf dem Bildschirm. Mit Hilfe 
der Leertaste ist es jetzt möglich, den 
Punkt auf der Kursorposition zu setzen 
bzw. zu löschen. Um das neu erstellte 
Zeichen in Originalgröße zu sehen, muß 
das Kommando „Verify“ eingegeben wer- 
den. Jede Änderung wird direkt in den 
Speicher geschrieben, so daß man mit 
„Save“ den aktuellen Zeichensatz jeder- 
zeit auf der Diskette abspeichern kann. 


Kurzhinweise 
1. Zweck: 
Entwurf neuer und Änderung alter Zei- 


.chensätze 


2. Konfiguration: 

Apple II+/e/c; Apple-Pascal 1.1 oder 1.2 
3. Test: 

E(xecute DESIGNER.CODE 

4. Sammeldisk: 

DESIGNER.TEXT 

(Quelltext als DOS-3.3-Textfile, der mit 
GETDOS konvertiert und dann als 
DESIGNER.CODE compiliert werden muß.) 


DESIGNER.TEXT 


Unter Apple-Pascal 1.1 oder 1.2 

über C(ompile als DESIGNER. CODE 
compilieren. 

Dann zu Übungszwecken über 

E(execute DESIGNER.CODE starten 

und über L(oad und 

Welche Datei laden? "#4:SYSTEM.CHARSET" 
einlesen. 


( 38a ak aka ak ak ak ak ak a ak aa aka aaa) 
(* Apple Pascal Designer 1.® x) 
*) 

Programm zur Aenderung von x) 
Zeichensaetzen, die bei *) 
den Prozeduren 'Wchar' und x) 
'Wstring' verwendet werden. *) 

( aka ak aka aka aaa) 


{$C Gabor Herr 1984} 
{$S+} 


program designer; 
uses turtlegraphics; 


const x_anf=1ßß; 
y-anf= 29; {Bildschirmposition der Matrix} 
breite=1ß; {Groesse eines Matrixpunktes |} 


{Kursortasten:} 

cu_l=8 ;{ links } 
cu_r=21;{ rechts} 
cu_u=19;{ oben } 
cu_d=11;{ unten } 


(Steuertasten:} 
esc=27; { escape} 
bs =8 ; { backspace} 


tchartable=packed array[ß..63] of boolean; 
tcharset =array[ß..127] of tchartable; 


charfile :file of tcharset; 

| charset :tcharset; 

chartable:tchartable; 
index,zeile,spalte,indiff, faktor:integer; 


procedure writes(pattern:string;x,y:integer); 
{schreibt String auf der angegebenen Position} 
begin 
pencolor(none); 
moveto(x,y); 
wstring(pattern) 
end; 


procedure cleartxt; 
{loescht Fenster auf dem Bildschirm} 
begin 
viewport(9,279,145,168); 
fillscreen(black); 
viewport(9,279,®,191) 
end; 


procedure clearch; 
{loescht Matrix vom Bildschirm} 
begin 
viewport(99,189,19,19®); 
fillscreen(black); 
viewport(9®,279,9,191) 
end; 


44 


m —————————————————————————————————————————————————————————————————————————————————————————— 





if key=chr(bs) 
{bei <bs> zuletzt eingegebenes Zeichen loeschen} 
then 
begin 
if idx>l then 
begin 
idx:=idx-l; 
move(7); 
wchar(' '); 
move(7) 
end; 
end 
else 
{sonst Echo ausgeben} 
begin 
wchar(key); 
inword[idx]:=key; 
idx:=idx+tl 
end; 
until eoln(keyboard); 
inword:=copy(inword,1,idx-l); 
end; 


procedure plotpoint(xpos,ypos:integer;mode:boolean); 
{setzt einen Punkt in die Matrix auf dem Bildschirm} 
var color:screencolor; 
begin 
if mode then color:=white 
else color:=black; 
xpos:=xpos#*breite+tx_anf; 
ypos:=ypos#breite+ty_anf; 
viewport(xpostl,xpos+tbreite-2,ypos+tl,ypos+breite-2); 
fillscreen(color); 
viewport(®,279,9,191) 
end; 


procedure writechar(nr:integer); 
{zeichnet einen Charakter vergroessert 
und in Originalgroesse} 
var zle,spt:integer; 
nbr:string; 
begin 
for zle:=® to 7 do 
begin 
for spt:=® to 7 do 
begin 
if chartable[zlex8+spt ] 
then plotpoint(spt,zle,true); 
end; 
end; 
str(nr,nbr);writes(concat(nbr,' '),66,9®); 
drawblock(chartable,1,0,0,8,8,201,91,19) 
end; 


procedure input(var inword:string;x,y:integer); 
{String-Eingabe mit Echo im Grafikmodus} 
var idx:integer; 
key:char; 
begin 
idx:=1l;fillchar(inword,4®,chr(32)); 
pencolor(none);moveto(x,y);turnto(189); 
repeat 
read(keyboard,key); 
if key=chr(esc) then 
{bei <esc> Eingabe abbrechen} 
begin 
inword:=''; 
exit(input) 
end; 


procedure savechset; 
{speichert den aktuellen Zeichensatz auf Diskette} 
var filename:string; 


Peeker 1/86 





YAB2D AUIPAP DECKER 94 
pEEkeR AUFTRAG FUR KLEINANZEIGEN 
BO 





Text unter folgender Rubrik: 
[] suche Hardware [] suche Software OD) Verschiedenes 
[] biete Hardware [] biete Software UL] Chiffre 


u Bitte veröffentlichen Sie in der nächsterreichbaren Ausgabe nachstehenden 














Bitte jeweils 32 Buchstaben pro Zeile-einschließlich Satzzeichen und Wort- 
zwischenräume. Bitte Absender nicht vergessen. Mindestens 2 Zeilen. 


Chiffregebühr DM 6,— zuzügl. MwSt. 





Sie können unter dieser 

Rubrik zu einem besonders 

günstigen Preis 

@ Ihre Hardware und 
Software verkaufen 


@ Ihre Hard- und Software 
suchen en an a En 
® Kontakte knüpfen und 


vieles mehr 


en 
o 
a 
Gelegenheitsanzeigen o 








En 


‚Sete _______ erschienenen 











Zu der im Peeker, Heft 


Musteranzeige privat 


1 Druckzeile a 32 Buch- 
staben nur DM 5,50 
zuzügl. ges. MwSt. 
Mindestens 2 Druckzeilen 


Beispiel: 


Anzeige über 


bitte ich um detaillierte Information. 
Ich wünsche [| Prospekt, Datenblatt [] Preisliste [| schriftliches Angebot [| tel. Rückruf 


Produkt und Bestellnummer 


gebe ich neben- 
stehende Bestellung 
unter Anerkennung 
Ihrer in der Anzeige 
genannten Liefer- und 
Zahlungsbedingungen 
auf. 


Verkaufe neuwertigen Typenrad- 
drucker mit Apple-Interface. 
Preis auf Anfrage. Tel. 007 


nur DM 18,81 inkl. MwSt. 





Unterschrift (für Jugendliche unter 18 Jahren der Erziehungsberechtigte) 


vo 
2 
Z 
=) 
E 
Q 
E. 
“ 








Musteranzeige gewerblich ' 

1 Druckzeile a 32 Buch- an a u Eu 5 DEE (ER En 
staben nur DM 11,— zuzügl. a 

ges. MwSt. Mindestens 
2 Druckzeilen 


Beispiel: 


Schreiben Sie uns, wenn Sie technische Fragen zu Aufsätzen im Peeker 
haben. Beachten Sie jedoch, daß die Redaktion keine Auskünfte über Be- 
zugsauellen erteilt: 


Neu im Angebot: Professionelle, 
separate Tastatur für Apple II plus 


16 Funktionstasten und separatem 
Ziffernblock. 
Fa. Keyboard & Co. 





nur DM 62,70 inkl. MwSt. 








IYVYYY 


Vorname, Name 


= o m 
ie) “ en 
2 N} 3 
an | fee] eh) 
© & 

= 

-— 


PLZ/Ort 


itte veröffentlichen Sie den um- 
stehenden Text von Zeilen 
DM in der nächsterreich- 
aren Ausgabe vom Peeker 





oO 2» 


Bei Angeboten: Ich bestätige, daß ich alle 
Rechte an den angebotenen Sachen besitze 


Datum Unterschrift 


=» Peeker-Börse 


Karte bitte vollständig ausfüllen 


Vorname, Name 


= 
= 
D 


Straße 
PLZ/Ort 


Telefon mit Vorwahl 


Anschrift der Firma angeben, bei der Sie 
bestellen bzw. von der Sie Informationen 
wünschen 


= Produkt-Karte 





zz 


Karte bitte vollständig ausfüllen 


Vorname, Name 


Firma 


Straße 


PLZ/Ort 


Telefon mit Vorwahl 


DD Info-Karte 





POSTKARTE 


Peeker-Börse 
Anzeigen-Service 


Dr. Alfred Hüthig Verlag 
Postfach 10 2869 
6900 Heidelberg 1 


POSTKARTE 


Inserent 


Straße 


PLZ/Ort 


POSTKARTE 


Peeker 
Redaktion 


Dr. Alfred Hüthig Verlag 
Postfach 102869 
6900 Heidelberg 1 





EEE 





Produkt- 
Karte 





Wünschen Sie 
weitere Informatio- 
nen zu einer der im 
Heft erschienenen 
Anzeigen? 


Nichts einfacher als 
das. Produkt-Karte 
ausfüllen, frankieren 
und an den 
Inserenten (nicht an 
die Peeker-Redaktion) 
senden. 


Vorher aber nicht 
vergessen: 

Kreuzen Sie an, 
welchen Informations- 
wunsch Sie haben. 


Damit erleichtern Sie 
dem Hersteller 

eine gezielte Beant- 
wortung Ihrer Anfrage. 


Zum Schluß tragen 
Sie auf der Rück- 
seite die genaue 
Anschrift des 
Inserenten und Ihren 
Absender ein. 


DEEKER 








{Die Ein- und Ausgabekontrollen 
werden unterdrueckt, um zu 
verhindern, dass beim Auftreten 
eines Fehlers das Programm ab- 
stuerzt.} 


{$i-} 


begin 
writes('Welche Datei speichern?',®,16®); 
input(filename,®,152); 
cleartxt; 
if filename='' then exit(savechset); 
rewrite(charfile, filename); 
if ioresult<>® then 
{Fehlerbehandlung} 
begin 
writes( 'I/0-Fehler' ,®,16ß®); 
writes('Return eingeben',®,152); 
readln;cleartxt 
end; 
charfile?:=charset; 
put(charfile); 
close(charfile,lock) 
end; 


procedure loadchset; 
{holt Zeichensatz von der Diskette} 
var filename:string; 
I, J : integer; 


begin 
writes('Welche Datei laden?',®,169®); 
input(filename,®,152); 
cleartxt; 
if filename='' then exit(loadchset); 
reset(charfile, filename); 
if ioresult<>® then 
{Fehlerbehandlung} 
begin 
writes('Datei existiert nicht',®,16®); 
writes('Return eingeben',®,152); 
readlIn;cleartxt 
end; 
charset:=charfilef; 
close(charfile); 
index:=ß; 
chartable:=charset[index]; 
for I :=9 to 3 do 
for J :=® to 31 do 
drawblock(charset[Ix32+4J],1,0,0,8,8,Jx8,135-Ix9,1ß) 
end; 
{$i+} {Kontrolle wieder einschalten} 


procedure newset; 
{loescht den aktuellen Zeichensatz} 


begin 
fillchar(charset,sizeof(charset),chr(ß)); 
index:=ß; 
chartable:=charset[index] 

end; 


procedure newchar; 

{loescht das angezeigte Zeichen} 

begin 
fillchar(chartable,sizeof(chartable),chr(ß)) 
end; 


procedure cursor(x,y:integer); 
{Kursorposition anzeigen} 
begin 
chartype(6); 
moveto(x*breite+x_anf+l,y*breite+ty_anf+l); 
wchar('*');chartype(1®) 
end; 


procedure new; 
{loeschen} 
var key:char; 
begin 
writes('Neuer C(har oder A(lle?',®,16®); 
repeat 
read(keyboard,key) 
until (key in ['c','C','a','A']) or (key=chr(esc)); 
if key<>chr(esc) then 
begin 
if key in ['c','C'] 
then newchar 
else newset; 
end; 
cleartxt 
end; 


Peeker 1/86 








vcsd 94 


procedure invert; 
{Punkt invertieren} 
begin 
if chartable[zeilex8+spalte] 
then 
chartable[zeilex8+spalte]:=false 
else 
chartable[zeilex8+spalte]:=true; 
plotpoint(spalte,zeile,chartable[zeilex8+spalte]); 
drawblock(chartable,1,9,0,8,8,201,91,1®); 
cursor(spalte,zeile) 
end; 


procedure initialize; 

{Variablen initialisieren und Bildschirm aufbauen} 

begin 
newset; 
index:=ß;indiff:=ß;spalte:=ß;zeile:=ß; 
initturtle; 
moveto(®,18®);wchar(chr(1l)); 
writes('designer 1.® *N(eu,S(ave,L(oad,Q(uit',16,189®); 
writes('v(erify,[-,+] next char, [sp] invert bit*',®,179); 
moveto(®,169) ;pencolor (white) ;moveto(279,169); 
pencolor(none) ;moveto(®,144); 
pencolor (white) ;moveto (279,144); 
pencolor(none);moveto(®,1ß6); 
pencolor (white) ;moveto (279,196); 
writes('char nr:ß',19,9®); 
moveto(199,89) ;turnto(ß) ;pencolor (white); 
move(ll);turn(9®);move(l11);turn(99); 
move(ll);turn(9®);move(1ll); 
pencolor(none); 
viewport(97,182,17,1®2); fillscreen(white); 
clearch 

end; 


procedure edit; 
{Das eigentliche Hauptprogramm} 
var key:char; 


begin 
repeat 
cursor(spalte,zeile); 
repeat 
read(keyboard,key) 
until key in LS Eee KR - SZ Br a Ele AUBe7 : 0 
Eat EN! tt mi, I! 11, 
‚9'..'9', chr(ou..l); ehrlewr), 
chr(cu_u),chr(cu_d)]; 
case key of 
'n','N':new; 
's','S':savechset; 
'1l','L':loadchset; 
'+','!=!:if faktor=® then indiff:= 1 
else indiff:=faktor; 
'-','_':if faktor=ß then indiff:=-1 
else indiff:=-faktor; 
es :invert; 
end; 
cursor(spalte,zeile); 
if key in [' ', '9'..'9', chr(cu_l), chr(cu_r), 
chr(cu_u),chr(cu_d)] 
then 
begin 
case ord (key) of 
cu_l : if spalte>® then spalte:=spalte-]; 
cu_r : if spalte<7 then spalte:=spaltetl; 
cu_u : if zeile>® then zeile :=zeile-]; 
cu_d : if zeile<7 then zeile :=zeile+tl; 
end; 
if key in ['ß'..'9'] then 
{Voreinstellungsfaktor} 


in faktor:=faktorx*1lß+ord(key)-48 


else 
begin 
charset[index]:=chartable; 
drawblock(chartable,1,90,9,8,8,index mod 328, 
135-index div 329,19); 
index:=indextindiff; 
indiff:=ß; faktor:=ß; 
if index<® then index:=ß; 
if index>127 then index:=ß; 
chartable:=charset[index]; 
clearch;writechar(index); 
end; 
until key in ['q','Q']; 
end; 
{Hauptprogramm} 
begin 
initialize; 


edit = 
end. 


47 











READPAS 





Konvertierung von UCSD- in Turbo-Pascal-Textfiles 


Wer bislang unter UCSD-Pascal bzw. Ap- 
ple-Pascal 1.1 oder 1.2 gearbeitet hat und 
nunmehr Programme unter Turbo-Pascal 
entwickeln will, wird sicherlich einen Teil 
seiner alten UCSD-Programme überneh- 
men wollen. Allerdings kennt UCSD-Pas- 
cal zahlreiche Befehle, die Turbo-Pascal 
nicht kennt und umgekehrt. Ferner sind 
diverse Feinheiten zu beachten, so daß es 
mit der Konvertierung des UCSD-Pascal- 
Textfiles allein nicht getan ist. 


Das nachfolgende Turbo-Pascal-Pro- 


compiliert werden muß, nachdem zuvor 
die Endadresse (nicht die Startadresse!) 
auf $C7FF gesetzt worden ist. Verfahren 
Sie im einzelnen wie folgt: 


1. Turbo-Pascal 2.0 oder 3.0 starten. 

2. Quelltext eingeben und unter READ- 
PAS.PAS abspeichern. 

3. O(ptionen und dann C(om-File wählen 
und zum Schluß E(nd-Address auf $C7FF 
setzen. 

4. Nunmehr vom Hauptmenü aus C(ompi- 
lieren. 


von Michael Erperstorfer 


wie eine übliche COM-Datei mit 
>READPAS 

Das Programm setzt zwei Laufwerke vor- 
aus. Die CP/M- bzw. Turbo-Pascal-Ar- 
beitsdiskette legen Sie zweckmäßigerwei- 
se in Laufwerk 1 (A; #4) und die Apple- 
Pascal-Diskette in Laufwerk 2 (B; #5). 
Nach dem Start von READPAS.COM kön- 
nen Sie sich zunächst über Menü-Option 
2 das UCSD-Pascal-Directory ansehen. 
Danach brauchen Sie nur noch den Na- 
men des gewünschten UCSD-Textfiles 


gramm READPAS läuft sowohl unter Tur- 
bo 2.0 als auch 3.0. Es ist jedoch darauf zu 
achten, daß der Quelltext auf Diskette 


READPAS 


PROGRAM READPASCAL; {von Michael Erperstorfer} 
CONST BUFFSTART=$C800; {START DES 128 BYTE LESEPUFFER} 


TYPE 
FILETYP=RECORD 
FNAME: STRING[15]; 
VON:0..280; 
BIS:0..280; 
FTYP:STRING[4]; 
EOFBYTE:O..511 
END; 


VAR 
BUFFER:ARRAY[O..127] OF BYTE ABSOLUTE BUFFSTART; {LESEPUFFER} 
BLOCK: ARRAY[O..511] OF BYTE; {PASCAL-BLOCK} 
DIRBLOCK: ARRAY[O..2047] OF BYTE; {4 BLOCKS FUER DIRECTORY} 
PASBUFF:ARRAY[O..30719] OF BYTE; {PUFFER FUER PASCAL TEXT-FILE} 
TAB: ARRAY[O..7,1..4] OF 0..31; {LOOK-UP TABELLE} 
EINTRAG: ARRAY[1..77] OF FILETYP; {MAX 77 FILES IN PASCAL)} 
OUT: TEXT; 
VOLNAME:STRING[15]; 
BEZUGSLW , FILEZAHL ‚ BLZAHL: INTEGER;; 
LWP ‚,LWC: CHAR; 


PROCEDURE TABINIT; {SEKTOR/BLOCK-UMWANDLUNG PASCAL-CP/M} 
BEGIN 
TAB[O,1]:= 0; TAB[O,2]:= 1; TAB[0,3]:=12; TAB[0,4]: 
TAB[1,1]:=24; TAB[1,2]:=25; TAB[1,3]: ; TAB[1,4]: 
TAB[2,1]:=16; TAB[2,2]:=17; TAB[2,3]: ; TAB[2,4]: 
TAB[3,1]:= 8; TAB[3,2]:= 9; TAB[3,3]: ; TAB[3,4]: 
TAB[4,1]:=22; TAB[4,2]:=23; TAB[4,3]:= 2; TAB[4,4]: 
TAB[5,1]:=14; TAB[5,2]:=15; TAB[5,3]: ; TAB[5,4]: 
TAB[6,1]:= 6; TAB[6,2]:= 7; TAB[6,3]: ; TAB[6,4]: 
TAB[7,1]:=30; TAB[7,2]:=31; TAB[7,3]: ; TAB[7,4]: 
END; 


PROCEDURE READBLOCK (BLNUM: INTEGER) ; 
VAR SPURNUM, TABINDEX, I, ERROR: INTEGER; 


PROCEDURE FILLBLOCK (NUM: INTEGER) ; {FUELLT PASCAL-BLOCKPUFFER)} 
VAR J,BLINDEX: INTEGER; {MIT CP/M SEKTOR (4 MAL)} 
BEGIN 
BLINDEX:=(NUM-1)x128; 
FOR J:=0 TO 127 DO 
BEGIN 
BLOCK[BLINDEX] :=BUFFER[J]; 
BLINDEX:=BLINDEX+1 
END 
END; 


BEGIN 
SPURNUM:=BLNUM DIV 8; 
TABINDEX:=BLNUM MOD 8; 





48 


Die entstandene Objektcode-Datei starten 
Sie dann unter dem CP/M-Betriebssystem 





und darauf den ggf. gekürzten Turbo-Text- 
file-Namen (mit Suffix „.PAS“) einzuge- 
ben. Die konvertierte Datei läßt sich direkt 
in den Turbo-Pascal-Editor einlesen. 


FOR I:=1 TO 4 DO 
BEGIN 
BIOS(11,BUFFSTART); {SETZT BEGINN DES LESEPUFFERS} 
BIOS(7); {SETZT KOPF AUF SPUR 0} 
BIOS(9,SPURNUM) ; {SETZT SPURNUMMER} 
BIOS(10,TAB[TABINDEX,I]); {SETZT SEKTORNUMMER} 
BIOS(8,0RD(LWP)-65); {SETZT LAUFWERK} 
ERROR:=BIOS(12); {LIEST SEKTOR IN LESEPUFFER} 
IF ERROR<>O THEN 
BEGIN 
WRITELN(CHR(7),'I/O FEHLER IN LAUFWERK ',LWP,'.'); WRITELN; 
WRITE( 'CP/M-DISKETTE EINLEGEN UND <RETURN> DRUECKEN '); 
READLN; 
BDOS(0) 
END; 
FILLBLOCK(I); 
WRITE('.') 
END 
END; 


PROCEDURE READDIRECTORY; 
VAR I,J: INTEGER; 


PROCEDURE GETFILES; 
VAR K, INDEX, TYPNUM: INTEGER ; 
BEGIN 
INDEX :=26; 
FILEZAHL :=0; 
REPEAT 
IF DIRBLOCK[INDEX+6]>O THEN 
BEGIN 
FILEZAHL :=FILEZAHL+] ; 
WITH EINTRAG[FILEZAHL] DO 
BEGIN 
VON:=DIRBLOCK[ INDEX ]+DIRBLOCK[ INDEX+1 ]x256; 
BIS:=DIRBLOCK[ INDEX+2 ]+DIRBLOCK[ INDEX+3 ]x256 ; 
EOFBYTE:=DIRBLOCK[ INDEX+22 ]+DIRBLOCK[ INDEX+23 ]x256-1; 
TYPNUM :=DIRBLOCK[INDEX+4 ] ; 
CASE TYPNUM OF 
2:FTYP:='CODE'; 
3:FTYP:='TEXT'; 
SYFTIF:="DATR" 
END; 
FNAME[O ] :=CHR (DIRBLOCK[ INDEX+6 ] ) ; 
FOR K:=1 TO DIRBLOCK[INDEX+6] DO 
FNAME[K] :=CHR(DIRBLOCK[6+INDEX+K ] ) 
END 
END; 
INDEX :=INDEX+26 
UNTIL INDEX>2021 
END; 


BEGIN 

CLRSCR; 

WRITE('Das Directory wird gelesen'); 
FOR I:=2 TO 5 DO 


Peeker 1/86 








BEGIN 
READBLOCK (I); 
FOR J:=0 TO 511 DO DIRBLOCK[ (I-2)*512+J]:=BLOCK[J] 
END; 
VOLNAME[O] :=CHR(DIRBLOCK[6]); 
FOR I:=1 TO DIRBLOCK[6] DO VOLNAME[I]:=CHR(DIRBLOCK[6+1]); 
GETFILES 
END; 


PROCEDURE PRINTDIRECTORY; 
VAR I, ZAEHLER: INTEGER; 
BEGIN 
IF FILEZAHL>O THEN 
BEGIN 
CLRSCR; 
ZAEHLER:=0; 
WRITELN( 'Directory der Pascal-Diskette ',VOLNAME, ':'); 
WRITELN; 
WRITELN( ' Filename Laenge in Blocks Filetyp'); 
WRITELN ( '——-— "; 


MEERE 15 CHBE NER VERHELEBEEPin EEE ESERDE A SENSERIERRE A EHE BENENNEN EDLER ) s 


FOR I:=1 TO FILEZAHL DO WITH EINTRAG[I] DO 
BEGIN 
WRITELN(FNAME: 20, (BIS-VON):10,' 
ZAEHLER :=ZAEHLER+H1 ; 
IF (ZAEHLER=18) OR (I=FILEZAHL) THEN 
BEGIN 
WRITELN; 
WRITE( 'Weiter mit <return> '); 
READLN; 
ZAEHLER:=0O; 
CLRSCR 
END 
END 
END 
END; 


',FTYP, '-FILE'); 


PROCEDURE TRANSFER; 

VAR I,J, INDEX, ANFANG, ENDE: INTEGER;; 
PASNAME, CPMNAME: STRING[15]; 
TABFLAG: BOOLEAN; 

EIN: CHAR; 


FUNCTION GETNAME: BOOLEAN; 
BEGIN 
CLRSCR; 
WRITE('Name des Pascal-Textfiles: '); 
READLN ( PASNAME) ; 
IF POS('.TEXT' , PASNAME)=O 
THEN PASNAME:=CONCAT (PASNAME, '.TEXT'); 
GETNAME:=FALSE; 
FOR I:=1 TO FILEZAHL DO 
IF EINTRAG[I].FNAME=PASNAME THEN 
BEGIN 
GETNAME:=TRUE; 
INDEX :=I 
- END 
END; 


PROCEDURE WRITEFILE; 
VAR IND,I:INTEGER; 
BEGIN 
IND:=0; 
FOR I:=ANFANG TO ENDE DO 
BEGIN 
READBLOCK (I); 
FOR J:=0 TO 511 DO 
BEGIN 
PASBUFF[ IND] :=BLOCK[J] ; 
IND:=IND+1 
END 
END; 
READBLOCK (ENDE+1); 
FOR J:=0 TO EINTRAG[INDEX].EOFBYTE DO 
BEGIN 
PASBUFF[ IND] :=BLOCK[J]; 
IND:=IND+1l 
END; 
N BIOS(8, BEZUGSLN) ; 
IND:=IND-1; 
TABFLAG:=FALSE; 
WRITELN; WRITE('Name des CP/M-Files (ohne Laufwerksangabe):'); 
READLN (CPMNAME) ; 
CPMNAME:=CONCAT (LWC, ':',CPMNAME) ; 
ASSIGN (OUT, CPMNAME) ; 
REWRITE(OUT); 
FOR I:=0 TO IND DO 
IF TABFLAG THEN 


BEGIN N 
FOR J:=1 TO PASBUFF[I]-32 DO WRITE(OUT,' '); {LEERZEICHEN} 
TABFLAG:=FALSE 

END 


Peeker 1/86 


TURDO 44 


ELSE 
BEGIN 
CASE PASBUFF[I] OF 
13:WRITE(OUT,CHR(13),CHR(10)); {LINEFEED ANFUEGEN} 
16:TABFLAG:=TRUE; {NAECHSTES ZEICHEN: EINRUECK-WERT} 
32..126:WRITE(OUT,CHR(PASBUFF[I])) {NUR LESBARE ZEICHEN} 


END; 
IF I MOD 128=0 THEN WRITE('.') 
END; 
CLOSE (OUT) 
END; 
BEGIN 
CLRSCR; 
WRITELN( 'Pascal-Diskette in das Laufwerk ', 
LWP,' einlegen.'); WRITELN; 
WRITE('F)ertig oder zurueck zum M)enu ? '); 
REPEAT 


READ(KBD,EIN); EIN:=UPCASE(EIN) 
UNTIL EIN IN ['F','M']; 
IF EIN='F' THEN 


BEGIN 
READDIRECTORY ; 
IF NOT GETNAME THEN 
BEGIN 
WRITE ( PASNAME, 
' nicht gefunden ! Weiter mit <return> '); 
READLN; 
PRINTDIRECTORY 
END 
ELSE 
BEGIN 


ANFANG :=EINTRAG[ INDEX] . VON+2; 

ENDE :=EINTRAG[ INDEX] .BIS-2; 

IF (ENDE-ANFANG)>58 
THEN WRITELN(CHR(7), "Programm zu gross!') 
ELSE WRITEFILE 

END 

END 
END; 


PROCEDURE MENU; 
VAR AUSWAHL: CHAR; 
ENDE: BOOLEAN; 
BEGIN 
ENDE:=FALSE; 
LWP:='B'; {DEFAULT P-SYSTEM: LAUFWERK C} 
LWC:='A'; {DEFAULT CP/M: LAUFWERK D} 
REPEAT 
CLRSCR; 
GOTOXY(28,1); WRITELN('READPASCAL'); WRITELN; 


WRITELN(' von Michael Erperstorfer'); WRITELN; 
WRITELN(' Programm zum Lesen von UCSD-Textfiles'); 
WRITELN; 


WRITELN('l...Laufwerk-Daten aendern (CP/M: ', 
! . ı ! ' . 
WRITELN: ING," Pascal: ",LWP,*")"'); 


WRITELN('2...Directory der Pascal-Diskette'); WRITELN; 
WRITELN('3...Pascal-Texfile nach CP/M uebertragen'); WRITELN; 
WRITELN('4...E ND E'); WRITELN; WRITELN; 

WRITE( "Auswahl: '); 

REPEAT 


READ (KBD, AUSWAHL) ; WRITELN (AUSWAHL) 
UNTIL AUSWAHL IN ['1'..'4']; 
CASE AUSWAHL OF 
'1':BEGIN 
CLRSCR; 
WRITE( 'Laufwerk fuer die CP/M-Diskette (<A>,<B>): '); 
REPEAT 
READ (KBD,LWC) ; WRITELN(LWC); 
LWC:=UPCASE(LWC) 
UNTIL LWC IN ['A','B']; 
WRITE( 'Laufwerk fuer die Pascal-Diskette (<A>,<B>): '); 
REPEAT 
READ(KBD,LWP); WRITELN(LWP); 
LWP:=UPCASE(LWP) 
UNTIL LWP IN ['A','B'] 
END; 
'2':BEGIN 
READDIRECTORY; 
PRINTDIRECTORY 
END; 
'3': TRANSFER; 
'4':ENDE:=TRUE 
END 
UNTIL ENDE 
END; 


BEGIN 
BEZUGSLW:=BDOS (25); 
TABINIT; 

MENU; 
BIOS(8,BEZUGSLN) 
END. 


49 





Kyan-Pascal 


Ein vollcompilierendes 6502-Pascal Erfahrungsbericht von Herbert Pohl 


Hinweis: Der nachfolgende Erfahrungsbe- 
richt basiert noch auf den Kyan-Pascal- 
Versionen 1.0 und 1.1. Die verbesserte 
Version 1.2 wurde am 14.08.1985 ausge- 
liefert. 


Was erwarten Sie, wenn Sie das Pascal- 
Programm GENAU unter UCSD-Pascal 
oder Turbo-Pascal auf einem Apple Ile 
laufen lassen? Unter Turbo-Pascal (V1.0 
oder V2.0) wird der Rechner nach etwa 
53s jammern, unter UCSD-Pascal nach 
etwa 144s. Ohne Ausgabe der Rechener- 
gebnisse auf dem Bildschirm sind es 1,8s 
bzw. 3,5s, vom ersten Piepsen des Laut- 
sprechers an gerechnet. 

Unter Kyan-Pascal, Version 1.0 und 1.1, 
das seit einiger Zeit für den Apple Il erhält- 
lich ist, frohlockt der Rechner nach 24 
bzw. 5s. Unter diesem Pascal wird also im 
Gegensatz zu den beiden anderen Pascal- 
Implementierungen bei den aufeinander- 
folgenden Subtraktionen exakt der Wert O 
erreicht. 

Begründet sein muß dies darin, daß Tur- 
bo- und UCSD-Pascal Real-Zahlen als 
Dualzahlen darstellen, während Kyan-Pas- 
cal offenbar die BCD-Darstellung benutzt. 
Letzteres ist im mit dem System mitgelie- 
ferten Tutorial Manual allerdings nicht do- 
kumentiert, jedoch sprechen die im obigen 
Programm erreichte Genauigkeit, der 
durch Real-Zahlen darstellbare Zahlenbe- 
reich (betragsmäßig von 1.0E-99 bis 
9.999999999999E +99, 13 geltende Zif- 
fern) und der zur Darstellung benötigte 
Speicherplatz von acht Bytes hierfür. 


1. Lieferumfang 


Aufgrund einer Anzeige in der Zeitschrift 
„Incider“ habe ich das Kyan-Pascal-Sy- 
stem Anfang Mai in den USA bestellt und 
innerhalb von vierzehn Tagen für knapp 
60.00 Dollar erhalten; inzwischen beträgt 
der Preis einschließlich Versand für Euro- 
pa knapp 82.00 Dollar. Kyan-Pascal soll 
übrigens auch für den Atari 800 XL und 
den Commodore C64 erhältlich sein. 

Geliefert wurden eine Pascal-System-Dis- 
kette und ein Tutorial Manual, wobei die 
nähere Untersuchung des Systems das 
Vorhandensein einiger Fehler im Manual 
zeigte. Ansonsten ist dieses Anleitungs- 
buch recht geschickt aufgebaut und insbe- 
sondere auch für Anfänger geeignet, so- 


0 


fern sie einigermaßen Englisch beherr- 
schen. Die Bedienung von Editor und 
Compiler wird anhand von Beispielen er- 
Iäutert. Hierauf erfolgt eine kurze Einfüh- 
rung in die Programmierung mit Pascal 
und die Vorstellung der meisten der in 
diesem System eingebauten Möglich- 
keiten. 


Auf der Diskette der neuesten Version 1.2 
befinden sich die Dateien 


PRODOS (ProDOS-System 1.1.1) 

FILER (ProDOS-Kopierprogramm) 

ED (Kyan-Pascal-Editor 40 Z/Z) 

E80 (Kyan-Pascal-Editor 80 Z/Z) 

PC (Kyan-Pascal-Compiler) 

LIB (Kyan-Pascal-Library) 
HELLO.SYSTEM (Startup-Programm und 
zugleich Hauptmenü) 


sowie Hilfsprogramme für ProDOS (z.B. 
DIR für Directory-Anzeige), Include- 
Dateien (für Hires-Grafik und String-Verar- 
beitung) und Beispielprogramme in Text- 
und Codeform. Kyan-Pascal läuft auf dem 
Apple Il unter dem Betriebssystem Pro- 
DOS, das ebenso wie der ProDOS-Filer 
mitgeliefert wird und nur mit dem Kyan- 
System zusammen benutzt werden darf. 
Inzwischen habe ich (am 09.07.85) von 
Kyan Software gratis (!) die Version 1.1 
des Systems erhalten. Auch sonst bin ich 
bislang sehr zuvorkommend bedient 
worden. 

Meine Untersuchungen stützen sich auf 
die Version 1.0, sofern nicht anders er- 
wähnt. In Tabelle 3 finden Sie die Entste- 
hungsdaten wichtiger Dateien. 


2. Kurzeinführung 


Angenommen, man will das Programm 
GENAU eingeben, compilieren und laufen 
lassen. Hierzu ist die Kyan-Diskette oder 
eine entsprechende Arbeitsversion in 
Laufwerk 1 zu stecken und der Rechner 
anzuschalten. Zunächst wird ProDOS und 
dann das Hauptmenü-Programm PAS- 
CAL.SYSTEM (jetzt HELLO.SYSTEM) ge- 
laden, das sich auf dem Bildschirm mit 
KYAN PASCAL (Version 1.X) 

meldet, worauf das System auf die Einga- 
be eines Kommandos wartet, die mit der 
Return-Taste abzuschließen ist. Von die- 


sem Hauptmenü aus kann man durch Ein- 
gabe des jeweiligen Programmnamens 


1. den Editor (ED oder E80) 

2. den Compiler (PC) oder 

3. den compilierten Objektcode (z.B. GE- 
NAU.O) 


starten. Danach kommt man stets in das 
Hauptmenü zurück, das man jedoch durch 
Eingabe eines anderen ProDOS-System- 
programms (z.B. BASIC.SYSTEM) verlas- 
sen kann. (Anm.d.Red.: Das Hauptmenü- 
Miniprogramm PASCAL.SYSTEM, das ab 
Version 1.2 HELLO.SYSTEM heißt, ist we- 
gen der System-Bit-Map-Konflikte mit 
ProDOS erforderlich. Beispielsweise kann 
man das BASIC.SYSTEM nicht direkt aus 
dem Kyan-Editor heraus, wohl aber über 
das HELLO.SYSTEM starten.) 


2.1. ED/E80 = Editor 


ED ruft den 40-Z/Z-Editor auf, einen Bild- 
schirmeditor, dessen Steuerbefehle sehr 
an die des Turbo-Pascal-Editors erinnern. 
Zur Steuerung des Cursors sind sowohl 
die Pfeiltasten als auch TS, FD, TE und 
1X möglich. Außerdem gibt es Befehle, 
um den Cursor wortweise, seitenweise 
und an den Anfang oder das Ende der 
Datei zu bewegen. Ferner kann man ein- 
zelne Zeichen oder Zeilen löschen, Text- 
blöcke markieren, löschen und verschie- 
ben. Weiter kennt der Editor einen mit der 
ESC-Taste aufzurufenden Modus, in dem 
der Text auf Diskette abgespeichert, Text 
von der Diskette gelesen und eingefügt, 
der Name der Datei (eigentlich der Pro- 
DOS-Pfadname) geändert und die Editor- 
funktionen des Suchens und Ersetzens 
aufgerufen werden können. Aus diesem 
Modus heraus wird der Editor auch verlas- 
sen. Mittels dieses ESC-Modus ist es 
ebenso möglich, Textdateien zu transfe- 
rieren, indem man sie in den Editor lädt, 
den Pfadnamen ändert und die Datei mit 
dem neuen Pfadnamen abspeichert. 

Nach seinem Aufruf fordert der Editor, der 
für seine Arbeit den gesamten Speicher 
von $0800 bis $BAFF benutzt, die Eingabe 
eines ProDOS-Pfadnamens an. Findet er 
die zugehörige Datei, wird sie eingelesen 
und auf dem Bildschirm angezeigt, wobei 
der Cursor am Textanfang steht. Ist die 
Datei nicht zu finden, erfolgt die Meldung 
„FILE NOT FOUND. PRESS ANY KEY“. 


Peeker 1/86 





Nach einem Tastendruck wird der Bild- 
schirm gelöscht, und man kann seinen 
Text eingeben. Eine Status- oder Kom- 
mandozeile wie bei Turbo- oder UCSD- 
Pascal gibt es nicht. Jedoch kann jederzeit 
mit <ESC> ein Hilfsmenü aufgerufen 
werden, ohne den eigentlichen Text zu 
stören. Von diesem Hilfsmenü aus ist auch 
eine Aufstellung aller Editorbefehle aufruf- 
bar, was wiederum für Anfänger sehr hilf- 
reich ist. 

In der Version 1.0 unterstützt der Editor 
keine 80-Zeichenkarte. Die eingegebene 
Zeichenfolge wird beim Erreichen eines 
Zeilenendes einfach in der nächsten Zeile 
des Bildschirmes fortgesetzt, so daß meh- 
rere Zeilen auf dem Bildschirm eine logi- 
sche Zeile im Text ausmachen. Logische 
Zeilen müssen durch Einfügen von <CR> 
abgeschlossen werden. Mit dem Kyan-Sy- 
stem der Version 1.0 geschriebene Pro- 
gramme können jedoch die 80-Zeichen- 
karte ohne Einschränkungen benutzen. 
Mit der Version 1.1 ist nun neben dem 40- 
Z/Z-Editor ED ein 80-Z/Z-Editor E80 ver- 
fügbar, der auch eine Tabulator-Funktion 
besitzt. 


2.2. PC = Pascal-Compiler 


Mit PC wird der Compiler aufgerufen, der 
sich mit „PC>“ meldet und die Eingabe 
des Namens des zu compilierenden 
Quelltextes erwartet. Nach Tippen des 
entsprechenden Pfadnamens, etwa 
GENAU, 

beginnt der Compiler seine Arbeit und er- 
zeugt ein 6502-Maschinenprogramm, das 
ebenfalls auf Diskette abgelegt wird, und 
zwar unter demselben Pfadnamen wie der 
Quelltext, jedoch mit einem angehängten 
„.O“, also etwa „GENAU.O“. Die Compi- 
lierungszeiten sind mit denen des UCSD- 
Pascal vergleichbar, jedoch ist der Fort- 
gang der Compilierung in der Regel nicht 
auf dem Bildschirm verfolgbar. 

Beim Starten des Compilers kann man 
dem Pfadnamen der Pascal-Quelldatei ei- 
ne oder mehrere Compileroptionen anfü- 
gen, die durch Bindestriche vom Pfadna- 
men und voneinander zu trennen sind. 
-Ln erzeugt hierbei die Ausgabe des com- 
pilierten Programmes als Assemblerdatei 
über Steckplatz n, 

-En lenkt die Fehlermeldungen auf Steck- 
platz n um, die sonst auf dem Bildschirm 
erscheinen, während 

-O die Erzeugung des Objektcodes unter- 
drückt. Die Angabe des Steckplatzes ei- 
nes Diskettenlaufwerkes führt allerdings 
zu einem Absturz des Compilers. Ich habe 
herausgefunden, daß die Eingabe dieser 
Optionen mit Großbuchstaben erfolgen 
muß und auch eine bestimmte Reihenfol- 
ge einzuhalten ist, wenn alles reibungslos 
ablaufen soll. Das Tutorial Manual weist 
hierauf nicht hin. 


Peeker 1/86 


In der Version 1.1 sind die Bezeichnungen 
für die Optionen leicht geändert worden. 
Auch ist jetzt Kleinschreibung und eine 
beliebige Reihenfolge zulässig: 

„-Sn“ wählt das Peripheriegerät an, auf 
dem dann zumindest die Fehlermeldun- 
gen erscheinen, „-L“ erzeugt die Ausga- 
be der Assemblerdatei auf dem angewähl- 
ten Peripheriegerät. Die Option „-O“ ar- 
beitet wie in Version 1.0. 

Mit Hilfe dieser Option ist eine reine Syn- 
taxprüfung des Quelltextes möglich, die 
etwas weniger Zeit beansprucht als eine 
vollständige Compilierung. Da der Kyan- 
Compiler nach Auftreten eines Syntaxfeh- 
lers zwar die Erzeugung von Objektcode 
einstellt, aber die Syntaxprüfung ohne 
Pause weiter durchführt, empfiehlt es sich, 
die Fehlermeldungen auf einen Drucker zu 
lenken, wenn man nicht die Ausgabe mit 
NS unterbrechen will. Der Compilerlauf 
selbst kann übrigens jederzeit mit der Re- 
set-Taste abgebrochen werden, ohne daß 
die Quelldatei verlorengeht. 


2.3. RUN 


Nach erfolgreicher Compilierung wird das 
Programm gestartet, indem man im Haupt- 
menü einfach den Pfadnamen der zugehö- 
rigen Objektdatei, also etwa 

GENAU.O 

eingibt. Diese Datei ist eine Systemdatei 
im Sinne von ProDOS, so daß man sogar 
„SYSTEM.PASCAL“ (jetzt HELLO.SY- 
STEM) auf der Diskette durch ein eigenes 
Programm auf der Diskette ersetzen könn- 
te, das dann beim Bootvorgang automa- 
tisch aufgerufen werden würde. Unver- 
zichtbar für ein erfolgreiches Starten des 
Programms ist auf jeden Fall das Vorhan- 
densein der zusätzlich zum Objektcode 
benötigten Runtime-Library LIB in dem- 
selben Volume-Directory (Version 1.0) 
bzw. in demselben Subdirectory (Version 
1.1). 


3. Compiler und Objektcodedatei 


Beim Compilieren benötigt der Compiler 
vermutlich drei Läufe, was die hierbei er- 
zeugbaren Assemblerausdrucke und ein 
Dump des Compilers nahelegen. Im Tuto- 
rial Manual gibt es hierüber keine Hinwei- 
se; ein Reference Manual liegt mir nicht 
vor. Zunächst scheint der Quelltext in ei- 
nen Zwischencode, der dem P-Code des 
UCSD-Systems sehr ähnelt, übersetzt zu 
werden. Dies bedeutet offenbar auch, daß 
durch das Kyan-System auf dem 6502- 
Prozessor eine Stackmaschine ähnlich der 
P-Maschine simuliert wird. In einem weite- 
ren Lauf wird der Zwischencode vermut- 
lich in einen Assembler-Quelltext umge- 
setzt. Auf jeden Fall gibt es zu jedem 
Befehl des Zwischencodes im Compiler 
ein entsprechendes kleines Assem- 


kyan 94 


blerprogramm. In einem dritten Lauf wird 
dann endlich die Objektcodedatei erzeugt. 
Dieses Vorgehen scheint sehr umständ- 
lich zu sein und ist sicherlich für die im 
Vergleich zu Turbo-Pascal langen Compi- 
lierungszeiten mit verantwortlich. Aller- 
dings hat Kyan Software so eine äußerst 
elegante Möglichkeit verwirklicht, Maschi- 
nenprogrammteile in ein Pascal-Pro- 
gramm einzubinden. 


3.1. Assembler und Compiler 


Für die folgenden Betrachtungen soll das 
Programm P3 zugrundegelegt werden, 
das die 80-Zeichenkarte des Apple ein- 
schaltet. Die hier eingefügte Prozedur 
„Procedure pr (slot: integer);“ stammt von 
der Kyan-Diskette. Anhand des Program- 
mes P3 sieht man auch, daß Kyan-Pascal 
die Schnittstellen zu Peripheriegeräten so 
anspricht, wie es Applesoft oder der Ap- 
ple-Monitor tun. Wählt man beim Compi- 
lieren die Option „-L1“, hier also 

P3-L1 

(V1.1: P3-L-S1), 


so erzeugt der Compiler die Ausgabe ei- 
ner Assemblerdatei auf dem Drucker, falls 
dieser wie üblich in Steckplatz 1 ange- 
schlossen ist. Ein Abspeichern dieser 
Datei auf Diskette ist aus den o.g. Grün- 
den leider noch nicht möglich. 

Eine Untersuchung der Assemblerdatei ist 
trotzdem sehr lehrreich und macht das 
Kyan-Pascal-System sicherlich für diejeni- 
gen interessant, die Informatik unterrich- 
ten und hierbei auch auf die Arbeitsweise 
und den Aufbau von Compilern eingehen 
wollen. 

Betrachten wir nun also die Datei „P3”: 
Zunächst ist hier am Quelltext zu erken- 
nen, wie Kyan-Pascal Maschinenbefehle 
in ein Pascal-Programm einbindet. Die 
Folge der Maschinenbefehle ist mit #A zu 
eröffnen und mit # abzuschließen. Diese 
Steuerzeichen müssen in der äußersten 
linken Spalte einer logischen Zeile im 
Quelltext stehen und steuern den Compi- 
ler. Sehr angenehm ist, daß das Maschi- 
nenprogramm als Folge von Assembler- 
Mnemonics einzugeben ist und nicht, wie 
bei den Inline-Anweisungen von Turbo- 
Pascal, schon als fertig assemblierter Hex- 
code. Gerade durch diese Eigenschaft 
könnte Kyan-Pascal zu einem Leckerbis- 
sen für Freunde der Maschinensprache 
werden. Das Tutorial Manual gibt an, daß 
man Marken in Maschinensprachteilen 
nicht mit dem Buchstaben L beginnen las- 
sen soll, weil man hierdurch den Compiler 
verwirrt, der bis auf einige Ausnahmen 
sämtliche Marken mit L beginnen läßt und 
dann durchnumeriert (L1, L2 usw.). Wei- 
terhin muß in Maschinenprogrammteilen 
das X-Register des Prozessors gerettet 
werden, da es als Stapelzeiger in der Null- 


51 


Ute 





seite bei der Übergabe von Daten und 
Parametern bzw. Adressen von Variablen 
benutzt wird. Anders als im P-System wird 
hierfür nicht der CPU-Stapel verwendet. 


Wenn im Hauptmenü 
P3.0 


eingegeben wird, so wird die Objektdatei 
P3.0, also das 6502-Maschinenpro- 
gramm, ab $2000 in den Speicher geladen 
und gestartet. Das Programm überprüft 
zunächst, ob sich in dem durch das Pro- 
DOS-Präfix angegebenen Directory die 
Datei LIB, also die Laufzeitbibliothek des 
Pascal-Systems, befindet. Wird LIB gefun- 
den, so wird versucht, sie in zwei Teilen in 
den Hauptspeicher zu bringen, von $0800 
bis $1IFFF einschließlich und von $B000 
bis $BAFF einschließlich. Ab $BFOO be- 
ginnt ProDOS. Mißlingt dies oder ist LIB 
nicht vorhanden, so verzweigt das Pro- 
gramm zur Marke ERROR und von dort 
aus in den Apple-Monitor. Dies wird durch 
den Code von $2000 bis $207F bewirkt. 
Unter Version 1.1 ist für diesen Vorgang 
der Code von $2000 bis $20AC verant- 
wortlich, wobei lediglich LIB woanders ge- 
sucht wird. 


Läuft soweit alles erfolgreich, verzweigt 
das Programm in die Systemroutine ab 
$0800, die Startroutine. Diese nimmt zu- 
nächst die Rücksprungadresse vom CPU- 
Stapel, prüft anhand der ab $2082 (Ver- 
sion 1.1: $20AF) abgelegten Parameter, 
ob das eigentliche, in Maschinencode um- 
gesetzte Pascal-Programm zu einer ande- 
ren Startadresse zu verschieben ist, und 
führt letzteres gegebenenfalls auch durch. 
Vor einer eventuellen Verschiebung befin- 
det es sich ab $208F (Version 1.1: $20B3) 
im Speicher. Anschließend legt die Start- 
routine eine neue Rücksprungadresse auf 
den Stack und führt einen Sprung zum 
Beginn des eigentlichen Hauptprogramms 
durch, das mit RTS endet und sich so als 
Fortsetzung der Startroutine herausstellt. 
Nach dem Rücksprung aus dem Pascal- 
Hauptprogramm werden in einer anderen 
Systemroutine, der Schlußroutine, alle 
noch offenen Dateien geschlossen und in 
das Hauptmenü zurückgesprungen. 


Der Kyan-Compiler setzt die von $2000 
bis $208E (Version 1.1: $20B2) stehenden 
Befehle vor jedes compilierte Programm 
und bindet es so zwischen Start- und 
Schlußroutine ein, wodurch ein ordnungs- 
gemäßes Funktionieren des Systems ge- 
währleistet wird. Dies bedeutet aber auch, 
daß bei jedem Start eines compilierten 
Pascal-Programmes die gesamte System- 
bibliothek neu von der Diskette geladen 
wird, was merklich Zeit kostet. Hier emp- 
fiehlt es sich, eine RAM-Disk einzusetzen. 


Sehr schön an den vom Compiler erzeug- 
ten Assemblerdateien finde ich, daß je- 


92 


weils als Kommentar die aktuelle Zeile des 
Pascal-Quelltextes auftritt, gefolgt von ih- 
rer Umsetzung in Maschinencode. Gerade 
diese Eigenschaft dürfte den Kyan-Pascal- 
Compiler für jeglichen Unterricht interes- 
sant machen, der sich in irgendeiner Wei- 
se mit Compilerbau befaßt. Dies dürfte 
auch die Arbeit sehr erleichtern, wenn 
man den vom Compiler erzeugten Code 
optimieren möchte, auch wenn hierzu eine 
Dokumentation der Laufzeitroutinen in LIB 
wünschenswert wäre. Vielleicht kann die- 
se Eigenschaft auch über einige in den 
Compilern der Versionen 1.0 und 1.1 noch 
vorhandene Kinderkrankheiten hinwegtrö- 
sten. 


3.2. Labels 


Der Compiler definiert einige wichtige 
Marken, auf deren Bedeutung ich hier kurz 
eingehen möchte. Es sind dies neben 
PATHNAME und ERROR die Marken 
GLOBAL, LOCAL, SP, P, T, MLI, LO, L1, 
L2, L3 und LA. 

- GLOBAL ($B000) kennzeichnet den er- 
sten dem Benutzerprogramm nicht mehr 
verfügbaren Speicherplatz und dient als 
Referenzmarke für die sämtlichen Varia- 
blen zuzuordnenden Speicherplätze. So 
dient GLOBAL-1 ($AFFF) als Pufferspei- 
cher für die Datei INPUT (Tastatur), GLO- 
BAL-2 ($AFFE) als Pufferspeicher für die 
Datei OUTPUT (Bildschirm), von GLO- 
BAL-3 an abwärts werden die im Pro- 
gramm auftretenden Variablen angelegt, 
und zwar bis GLOBAL-L4 die globalen 
Variablen, dann dynamisch die bei Proze- 
duraufrufen erforderlichen lokalen. 

- LOCAL ($0002) und SP ($0004) sind 
Zeiger auf den Variablenstapel, den sie 
beim Aufruf von Prozeduren mittels einer 
linearen, verketteten Liste verwalten, wo- 
durch unter anderem auch Rekursion or- 
ganisiert wird. Mit Hilfe dieser Zeiger er- 
folgt außerdem der Zugriff auf lokale und 
aktuelle Parameter von Prozeduren, denn 
diesen Parametern werden, anders als 
den globalen, keine festen Speicherplätze 
zugewiesen. 

— P ($0080) ist die Startadresse für die bei 
ProDOS-Aufrufen erforderlichen Parame- 
ter während des Programmstarts. Ob P 
sonst noch vom System benötigt wird, ist 
mir noch nicht klar. 

— T ($0010) dient als Zwischenspeicher 
insbesondere bei der Aktivierung von Pro- 
zeduren und darf offenbar auch von Ma- 
schinenprogrammteilen durch den An- 
wender benutzt werden. 

— MLI ($BFO0) ist die Eintrittsadresse für 
ProDOS-Systemaufrufe. 

- LO gibt die Speicherstelle an, von der ab 
unmittelbar nach dem Einlesen der Ob- 
jektcodedatei der Maschinencode des ei- 
gentlichen Pascal-Programms steht. 


— L1 bezeichnet die Speicherstelle, an der 
der Code nach einer eventuellen Ver- 
schiebung beginnen sollte, sonst stimmt 
L1 mit LO überein. 

—-L2 gibt den niedrigsten vom Programm- 
code nicht mehr belegten Speicherplatz 
an. Hier beginnt also die Halde für dynami- 
sche Variablen. 

-L3 bezeichnet die Startadresse des Pas- 
cal-Hauptprogrammes. Falls im Programm 
Funktionen oder Prozeduren vereinbart 
oder durch die Include-Option des Compi- 
lers (#1) eingebunden werden, sind L1 
und L3 verschieden voneinander. 

— L4 gibt die Anzahl der von globalen 
Variablen des Pascal-Programmes beleg- 
ten Bytes an, wobei vom System selbst 
definierte globale Variablen wie INPUT und 
OUTPUT sowie nicht näher dokumentierte 
globale Hilfsvariablen mitgezählt werden. 
Während der Compilierung erzeugt der 
Compiler weitere Marken je nach Bedarf, 
die alle die Form Ln haben, wobei n die 
Marken durchnumeriert. Hierdurch ist das 
Verbot für den Anwender begründet, eige- 
ne Marken in Maschinenprogrammteilen 
mit L beginnen zu lassen. 


4. Der Sprachumfang 


Wie UCSD- und Turbo-Pascal kennt Kyan- 
Pascal keine Funktionen und Prozeduren 
als formale Parameter bei Funktionen und 
Prozeduren. 

Alle im Standard-Pascal verlangten Wort- 
symbole sowie die Compilerdirektive 
FORWARD sind vorhanden. Bei den Spe- 
zialsymbolen müssen für die geschweiften 
Klammern die Ersatzdarstellungen „(x“ 
und „x*)“ benutzt werden, ab Version 1.1 
sind auch die geschweiften Klammern zu- 
lässig. PACK und UNPACK fehlen wie in 
UCSD-Pascal und Turbo-Pascal. Ob in je- 
dem Fall automatisch gepackt wird, ist 
nicht klar. Das Tutorial Manual schweigt 
sich hierüber aus. Daten vom Typ ARRAY 
.. OF CHAR werden jedenfalls gepackt 


dargestellt. 
Weiterhin fehlt wie in Turbo-Pascal die 
Standardprozedur PAGE, obwohl das 


Handbuch auf sie verweist; sie soll später 
einmal eingebaut werden. 

Soweit ich feststellen konnte, arbeiten die 
Funktionen und Prozeduren zur Dateiver- 
waltung ordnungsgemäß. Die nicht zum 
Standard-Pascal gehörende Prozedur 
CLOSE ist nicht realisiert; sie ist hier auch 
unnötig, da bei jedem Aufruf von RESET 
oder REWRITE eventuell betroffene offene 
Dateien automatisch geschlossen werden. 
Löschen von Dateien ist so nicht möglich. 
Als Erweiterung ist die Prozedur SEEK 
eingebaut. 

Mittels der Erweiterung CHAIN läßt sich an 
ein Pascal-Programm ein weiteres Pascal- 
Programm oder eine andere ProDOS-Sy- 


Peeker 1/86 





Accelerator Ile macht 
Ihren Apple II, II Plus oder Ile 
dreieinhalbmal schneller. 


Jetzt laufen VisiCalc”, Apple Writer, PASCAL, BASIC, 
Datenbanken usw. endlich ohne langen Zeitverlust. 
Stecken Sie einfach die ACCELERATOR Ile Karte 
in irgendeinen Slot und beobachten Sie, 
wir Ihr Apple loslegt! 

ACCELERATOR Ile besitzt seinen eigenen schnellen 
6502 Prozessor und 80 K-Byte Hochgeschwindigkeits- 
speicher, einschließlich einer eingebauten schnellen 
Sprachkarte und schnellem RAM-Speicherplatz für die 
ROM-Sprache. 

Direkt von Pandasoft (Titan Distributor für Deutschland) 
oder bei Ihrem Applehändler. 


panday®ft Dr.-Ing. Eden 


Uhlandstraße 195 - 1000 Berlin 12 : Mo-Fr 10-18 Uhr, Sa 10-13 Uhr 
Telefon: 0 30/31 04 23 - Telex: 185 859 


oO) Id ngc Druckerinterfaces für Apple II+/e/ 
Printer Interface c/IIl Interfaces auf dem neuesten 


Stand der Technik. Kompatibel mit allen gängigen Druckern wie: 
APPLE, EPSON, STAR, NEC, OKIDATA usw. Passende Treiber- 


software wird über Dip-Switch ausgewählt. 
Grafikfähiges Druckerinterface 


Grap ple + das keine Wünsche mehr offen läßt. 


Über 2 Dutzend Kommandos ermöglichen die volle Kontrolle 
über alle Möglichkeiten Ihres N 
Druckers. Jetzt auch mit 

lle Features: Double Hires 
Grafics und 80 Zeichen Dump N 
mittels Druckerpuffer nachrüstbar vw 
über Bufferboard. \ 


Cr URRERED i 


ten 16 K Druckpuffer, der auf 
32 oder 64 K aufrüstbar ist. 



























hat aber zusätzlich einen integrier- 











Serielles Druckerinterface 
speziell für den Apple Image- 
writer. 


MlorLınk 
[RRAPPLER C | Be 


Software-Diskette. 


panday@ft Dr.-Ing. Eden 


Uhlandstraße 195 - 1000 Berlin 12 - Mo-Fr 10-18 Uhr, Sa 10-13 Uhr 
Telefon: 0 30/31 04 23 - Telex: 185 859 


Seriell-nach-Parallel-Wandler für 
den IIc im Kabel integriert. 





Peeker 1/86 








ThunderScan."” 


Ein neues optisches Lesegerät, das beliebige 
Vorlagen in MacPaint überträgt: Fotos, Zeich- 
nungen, Landkarten und Illustrationen werden 
in den Apple-Imagewriter eingespannt und von 
einem Lesekopf, der das Farbband ersetzt, 
abgetastet. 


Edit Scanner Tools 


















File 


ThunderScan'“ 






Light_Intensity_Gauge 


Long 













lLLi 10) 


Contrast = 110% 








Brightness = +10 


Quit Scan 


| Pause | 








Linestogo. 186 











® 32 Graustufen 

@ 80 Punkte/cm Auflösung 

® Ubertragungsmaßstab 25 % - 400 % 

® Vorlagen bis 20x25 cm 

@ Nachträgliche Veränderung des Kontrasts 
und der Helligkeit. 


pPpanday®@ftı.... :«- 


Uhlandstraße 195 - 1000 Berlin 12 : Mo-Fr 10-18 Uhr, Sa 10-13 Uhr 
Telefon: 0 30/31 04 23 - Telex: 185 859 


wir haben die und die 
Software... Hardware... 









2 RE 00 












EA 













und die 
Zeitschriften... 


wir haben die 
Bücher... 





mw) | 


AD 


"Fordern Sie unseren Gratiskatalog 
ALLES FÜR DEN APPLE Il+, Ile, IIc UND MACINTOSH 


panday®ft Dr.-Ing. Eden 


UHLANDSTR. 195 - D- 1000 BERLIN 12 
TEL.(O3O0) 310 423 -TELEX:185859 
Autorisierter daroka Fachhändler MICROSOFT. Distributor 









93 





stemdatei anketten, wobei sich Kyan-Pas- 
cal-Programm& Variablen nicht nur über 
Dateien übergeben können, sondern auch 
wie in Turbo-Pascal dadurch, daß die ge- 
meinsamen Variablen zu Beginn aller be- 
teiligten Progamme in gleicher Reihenfol- 
ge und mit gleichen Datentypen lückenlos 
vereinbart werden; andere Bezeichner 
dürfen vorkommen. 

Die Verwaltung der Halde (Heap) erfolgt 
durch die Standardprozeduren NEW und 
DISPOSE, die auf den ersten Blick auch 
ordnungsgemäß arbeiten und auf der Hal- 
de eine lineare, verkettete Liste anlegen. 
NEW weist dynamischen Variablen Spei- 
cherplatz auf der Halde zu, der von DIS- 
POSE dem System auch korrekt zurück- 
gegeben wird, jedoch wurden bei meinen 
Tests in beiden zur Zeit vorliegenden Ver- 
sionen des Kyan-Pascal für jede dynami- 
sche Variable unabhängig vom tatsächli- 
chen Bedarf 435 Bytes reserviert, weshalb 
die Haldenverwaltung ernsthaften Ansprü- 
chen bislang nicht genügt. Da sich mit der 
Erweiterung ASSIGN (Zeiger:POINTER; 
Stelle:INTEGER) Zeiger auf vom Program- 
mierer definierte Speicherplätze richten 
lassen, kann man sich hier mit einer eige- 
nen Verwaltung der Halde behelfen, aber 
dies ist nicht Sinn der Sache. 

Bei Verbunden (RECORDS) darf im Ge- 
gensatz zu Standard-Pascal der Bezeich- 
ner im Variantenteil nicht fehlen. Ein Kon- 
strukt der Form „... CASE BOOLEAN OF 
TRUE: (Feldliste); FALSE: (Feldliste) ...“ 
ist also nicht möglich. Weiterhin werden 
boolesche und selbstdefinierte skalare Se- 
lektoren nicht akzeptiert, sondern nach 
meinen Tests nur solche vom Typ INTE- 
GER oder CHAR. Eine wesentliche Ein- 
schränkung ist hierdurch allerdings nicht 


gegeben. Schwerer wiegt da schon, daß 
weder unter Version 1.0 noch 1.1 die 


WITH-Anweisung funktioniert; der Compi- 
ler stürzt hier in den Apple-Monitor ab. 


GENAU 


Program Genau; 
{Test auf Rundungsungenauigkeiten} 
var x, Y ;- real; 
i : integer; 
begin 
x := 1; 
y :=9.0l; 
writeln (chr(7)); 
while x <> ® do 
begin 
x !ı=xX-yY; 
write (x:20:1®); 
if x <-ß.l then 
repeat write (chr(7)) until false 
end; 
repeat write (chr(7)); 
for i:=1l to 1999 do {Pause} 
until false 


end. 





54 


Der Datentyp STRING ist anders als in 
Turbo-Pascal und UCSD-Pascal nicht ein- 
gebaut, sondern muß vom Programmierer 
wie im Standard-Pascal beispielsweise als 
CONST MaxString = 40; 

TYPE String = ARRAY [1..MaxString] OF 
CHAR; 

definiert werden, jedoch arbeiten READ, 
READLN, WRITE, WRITELN klaglos mit 
irgendwelchen Zeichenketten, ohne eine 
Laufanweisung zu verlangen. 

In einigen Textdateien der System-Disket- 
te stehen für die Verarbeitung des so defi- 
nierten Datentyps String die Prozeduren 
bzw. Funktionen LENGTH zur Bestim- 
mung der Länge eines Strings, CONCAT 
zur Verkettung von Strings, INDEX zum 
Auffinden der Position eines Strings inner- 
halb eines anderen Strings (entspricht der 
POS-Funktion des UCSD-Pascal) und 
SUBSTRING, um Teilstrings aus einem 
String herauszuziehen (entspricht der 
UCSD-Prozedur COPY) zur Verfügung. 
Mit Hilfe einer weiteren Textdatei, die bei- 
spielsweise durch die Include-Anweisung 
des Compilers „#I HIRES.I#“ in ein Pro- 
gramm eingebunden werden kann, sind 
für die hochauflösende Grafik die Proze- 
duren HGR zum Einschalten und Löschen 
der Grafikseite 1, TX zum Einschalten der 
Textseite, PLOT zum Zeichnen eines 
Punktes auf der Grafikseite und DRAW 
zum Zeichnen von Strecken auf der Gra- 
fikseite verfügbar. 


5. Laufzeiten 


Bei der Bestimmung der Laufzeiten wur- 
den Kyan-Pascal 1.1, UCSD-Pascal 1.2 
und Turbo-Pascal 1.0 mit einer normalen 
Z8OA-Karte benutzt. Die Ergebnisse fin- 
den Sie in Tabelle 1. Weiterhin habe ich 
einige Untersuchungen mit der Acker- 
mannfunktion (siehe Programm ACKER- 


ACKERMANN 


MANN) durchgeführt, deren Ergebnisse 
sich in Tabelle 2 finden. 

Bei der Wertung sollte man jedoch noch 
die jeweils erreichbare Rechengenauigkeit 
berücksichtigen. 


6. Fazit 


Ich selbst programmiere bislang nahezu 
ausschließlich in 6502-Assembler und in 
Pascal. Deshalb bin ich sehr froh, endlich 
ein Pascal-System für den Apple II verfüg- 
bar zu haben, das Maschinencode für den 
eigentlichen Prozessor des Apple erzeugt 
und außerdem recht preiswert ist. Beste- 
chend elegant ist außerdem die Einbin- 
dung von Maschinencode in ein Pascal- 
Programm, die für die recht langen Compi- 
lierungszeiten entschädigen mag. Bislang 
entdeckte Fehler des Systems betreffen 
raffiniertere Programmiertechniken mit 
Zeigern und Verbundtypen und lassen 
sich mit Mitteln des Systems umgehen, 
auf keinen Fall mindern sie den Wert des 
Systems für Pascal-Neulinge. 


Literatur 


Pascal, Einführung in die Sprache, Norm- 
Entwurf DIN 66256 Erläuterungen von 
Klaus Däßler, M. Sommer, Springer-Ver- 
lag, Berlin, Heidelberg, 1983 
Turbo-Pascal von Rudolf Herschel, Olden- 
bourg Verlag, München, 1985 

Apple Pascal, Sprache, te-wi-Verlag, 1985 
Apple Pascal, Betriebssystem, te-wi-Ver- 
lag, 1985 

Apple Pascal, Addendum Pascal 1.2., te- 
wi-Verlag, 1985 

Turbo Pascal Language Manual, Borland 
International, 1984 

Kyan Pascal, A Programming Language, 
Tutorial Manual, 1985 


Program Ackermann; 
var wert, m, n : integer; 


function Acker (m, n: 
var a : integer; 
begin 
if (m<ß) or (n<ß) then 

begin writeln (chr(7)); 
writeln ('Fehler'); readln 
end; 
write lt, 1,927) "J3} 
if m then a := n+l 
else 
begin 
if n=ß then a := acker (m-l,]|) 
else a := acker (m-l,acker (m,n-l)); 
end; 
acker := a 
end {acker}; 


integer): integer; 





Peeker 1/86 


begin 
repeat 


writeln ('Es wird die Ackermannfunktion berechnet'); 


writeln ('Geben Sie m und n ein'); 

readln (m,n); 

write (chr(7)); 

Wert := Acker (m,n); 

write (chr(7)); 

writeln ('A(',m,',',n,') = ',wert) 
until false 
end. 


P3 


Program P3; 


{89-Zeichenkarte einschalten} 
{Diese Prozedur simuliert PR#s} 


procedure pr (slot: integer); 
begin 

#+A {Anfang 6592-Assembler} 
STX T 

LDY #3 

LDA (SP),Y 
JSR $FE95 
LDX T 

+ {Ende 65ß2-Assembler} 
end; 


;‚OUTPORT 


begin 

pr (3); 

write ('Hier muss sie sein.'); 
readln 

end. 


Tabelle 1: Laufzeiten 


Operation 
Kyan-Pascal 
Berechnung der Wurzel 


einer ganzen Zahl 11®..129 
Division c := a/b 11.2 
Multiplikation ganzer 

Zahlen 0.790 
Addition ganzer Zahlen 0.194 
Mult. reeller Zahlen 4.3..4.9 
Add. reeller Zahlen 1.39..1.86 
Leere FOR-Schleife, 

ein Durchgang 0.21 


Tabelle 2: Ackermannfunktion: 


Kyan-Pascal 


Ackermann(3,2) 0.8 s 
Ackermann(2,22) ie 3 
Ackermann(2,23) in 1,5 s be- 
rechnet, , Absturz 
Ackermann(3,4) hängt 
Ackermann(3,5) hängt 


Zeiten in ns 
UCSD-Pascal 


UCSD-Pascal 


DB 0 
un un 


I: 
3. 
3. 


29.2 s 
Fehler 


Tabelle 3: Wichtige Entstehungsdaten 


ED Version 1.® 23.04.1985 (49-Z/Z-Editor) 
PC Version 1.® 14.04.1985 (Pascal-Compiler) 
LIB Version 1.® 07.04.1985 (Library) 

ED Version 1.1 16.06.1985 

E8® Version 1.l 26.06.1985 (80-Z/Z-Editor) 
PC Version l1.l 19.06.1985 

LIB Version 1.1 <NO DATE> 

ED Version 1.2 06.07.1985 

E8® Version 1.2 06.07.1985 

PC Version 1.2 27.07.1985 

LIB Version 1.2 26.06.1985 


Peeker 1/86 





Turbo-Pascal 


21..54 
5.94 


0.314..0.544 
0.044 
etwa 3.9 


5..1.48 0.51..9.66 


0.06 


Turbo-Pascal 


FH & 
[UN Er o)) 
un 


8.6 
berechnet 











Preiswerte Begleitdisketten 


Begleitdiskette 
zu „ProDOS für Aufsteiger“ 
Band 1 


- © 6 





Bd. 1: DM 28,-; Bd. 2: DM 28,— 


Begleitdiskette 
zu „Apple Assembler“ 





DM 28,— 


Begleitdiskette 
zu „Apple DOS 3.3" 





DM 28,— (Neue Diskette für 
3. Aufl.) 


Hüthig Software Service 
Postfach 102869 - 6900 Heidelberg 





2 kyan u, 











= -Yehigejalle a 


Neue Preise 1 


IMB-PC/XT-COMPATIBLE COMPUTER + ZUBEHÖR 

Mainboard XT f. 16bit + 256K-RAM + 8 Slots, Leerkarte 

Mainboard XT-640 K (on Bord) f. 16 Bit + 8 Stots Leerkarte 

Disk Controller leer (f. 2x360 KB-Drives) 

Disk Controller leer (f. 4 x 360KB-Drives) 

Monochrome Graph. + par. Printer Leerkarte (Hercules comp.) 

Color RGB + Video Graphik Leerkarte 

Parallel Printer Leerkarte 

512K-RAM Leerkarte 

Multifunktions Leerkarte (Printer, Ser, Game Uhr gepuffert) 

Disk-Muliti VO Leerkarte, (f. 3x360 K-Drive, 2xRS 232 1xpar. Printer 

Int., Game/Joystick Port, Real Time Clock/Kalender gepuff.) 59,-- 
384 K-Multifunktions Leerkarte, (1x par. Printer Int., Game/Joystiek 

Port, Real/time Clock/Kalender gepuffert) 55,-—- 
Prototype/Lochraster Leerkarte, durchkontaktiert 88,-- 
Mainboard XT-256 f. 16 bit CPU, OK (bis 256K-an board, oder 

640 K mit Addr. auf Karte aufr.) + Boot-ROM + 8 Slots best. + geprüft 359,-— 
Mainboard XT-256 w.o. jedoch 256 K - vollbest. und geprüft 439,-- 
Mainboard XT-640 f. 16 bit CPU, OK (bis 640 K-on board aufr.) 389,-- 
Mainboard XT-640 w.o. jedoch 256 K-RAM best. + gepr 469,-- 
Mainborard XT-640 w.o. jedoch 640 K - vollbest. und geprüft 749,-—- 
64KB-RAM-Chip-Aufrüstsatz (9 Stück) einzeln geprüft! 21,-- 
256 KB-RAM-Chip-Aufrüstung (9 Stück) einzeln geprüft 159,— 
Disk-Controller gepr. (f. 2x360 KB Drives) (Extra Kabel = 39,--) 99,-- 
Disk Controller gepr. (f. 4 x 360 KB-Drives)(Extra Kabel = 39,--) 109,-- 
Monochrome Karte geprüft 235,-- 
Monochrome Graph. + par. Printer Karte gepr. (Hercules comp.) 315,-— 
Color RGB + Video Graphikkarte gepr. 175,-- 
Parallel Printer-Karte gepr. o. Kabel (Extra Kabel = 49,-) 77 ,—— 
512K-RAM-Karte gepr. (OKB) 135,-- 
384K-Multifunktionskarte, RS 232, par. Printer, Interf. Game/Joystick Port, 
Real Time Clock gepuff., OK + RAM-Disk/Spooler/Uhr Softw 325,-- 
Muiltifunktionskarte (Par. + Ser. + Uhr gepuffert) gepr. 289,-- 
Disk Multi /O Karte (f. 2x360 K-Drive, 2xRS$ 232, 1xpar. Printer Int., 
Game/Joystick Port, Real Time Clock/Kalender gepuff.) 397,-—- 
Profi-Funktionstastatur dt. oder ASCII + 15er Block ab 215,-- 
135W/150W-Netzteil mit eingebautem Ventilator, Kurzschlußf. 219,--/279,-—- 
360KB-Diskdrive Slimline (Track Access Time <2mS) 

PC/XT - KOMPLETT-SYSTEME EINGEBAUT UND GEPRÜFT 

XT-256, 16 bit-Rechner (incl. Boot-Eprom) 128K-Ram im 

IBM-look-like Met.-Gehäuse + Profi-Fkt. Tast.+135 W-Netzt. gepr. 

XT-256, w.o.+ Contr.+360KBDrive+Color RGB+Vid. Graphic-Karte 162 
XT-256, w.o. jedoch statt Color mit Monochrome Karte 

XT-256, w.o. jedoch mit Monochrome-Graphic-Printer-Karte 

PC 10-Commodore 256 K+2 Laufwerke + Monitor + dt. Tast 

640 K-Speichererweiterungs-Set für PC 10 


APPLE-BUS COMPUTERPLATINEN + PERIPHERIE 
Motherboard II 48K leer, durchkont. mit Lötstopplack 
Motherboard Il w.o. jedoch 64 K leer 

M-board Il 48K, gesockelt, vollbest. + gepr 
Motherboard Il 64K gesockelt, vollbest.+gepr. 
M-board Il 64K + Z80 CPU, gesockelt, v. best. + gepr. 
M-board Ile 64K vollbestückt + gepr. 

izeluKeniä (17,77 27 7.7, 0 0°7 77.77 ,9.777°77 

APOLLO Il Gehäuse incl. Funkt.-Tast. 

Superstarkes Netzteil — Kurzschlußfest 

Leerplatine: 16K-RAM, Z80/CPU-, Controller DOS 3.3, 
Parallel-Druckerkarte, Ser. Int. V24, 802/24Z-Karte, PAL-Karte je 
Entwicklungslochraster-Leerplatine durchkontaktiert 
16K-Speicher-Karte geprüft 

APPLE orig. 16K-Language Karte gepr 

Z-80 CPU-Karte geprüft 

Controller DOS 3.3-Karte geprüft 

Auto-Controller DOS 3.2/3.3-Karte gepr. 

Erphi AFDC 2 Controller + Autopatch Softw. + Handbuch 
Parallei-Drucker-Karte geprüft 
Par.-Drucker-Grappler comp. Leerplatine 
Par.-Drucker Karte-Grappler comp. geprüft 

8bit par. Grappler-Int. + 64K-Buffer + Kabel.gepr. 
Seriell-Interface-Karte V24 geprüft 

Super-Seriell Leerkarte 

Super-Seriell-Interface Karte gepr 
80-Zeichen/24-Zeilen-Karte geprüft 

802/24Z-Karte + Softswitch-Schalter Leerplatine 
802/24Z-Karte + Softswitch-Schalter, gest. Scharf geprüft 
802/24Z-Softwitch Karte gepr. für Ile 

802/247 + 64K-Ram + Softsw. Leerkarte f. lie 
80Z/24Z +64K-Ram + Softsw.-Karte best. +gepr. f. Ile 
lEEE-488 Int. Karte gepr. 

PAL-Modulator/Color-Karte geprüft 

RGB-Color Karte gepr. 

128K-Speicher-Leerkarte 

128K-Speicher-Leerkarte + Software + Manual 
128K-Speicher-Karte + Software geprüft +Manual 
256K-Speicher Leerkarte 

256K-Speicher Leerkarte-+ Software +Manual 
256K-Speicher-Karte + Software geprüft +Manual 
Maus incl. Software 

EPROM-Burner 2716/32/64) geprüft 

6522-VIA Karte geprüft 

Clock Karte geprüft 

Speech Karte geprüft 

Wild Karte geprüft 

AD/DA-8Bit Karte gepr. 

Modem Euronorm-Karte gepr. + Software + Man. 
UHF/TV-Modulator universell 

Lüfter anclipsbar (220 V) 

Dataphon s21d Akustikkoppler-FTZ mit RS 232/V24 Anschl. 


APOLLO//(48K) + UHF-Mod. + Gr/Kl vollbest. + gepr. + F.-T. 
POLLO//(48K) + Disk II F + Contr. + 12”-Monitor 

APOLLO//A (48K) + Gr/Kl + 15er-Tastatur vollbest. + gepr. + F.-T. 
POLLO//A (48K) + Disk II F + Contr. + 12”-Mon 

APOLLO// ASKF (48K) vollbest. + gepr. Sep. Keyboard + Gr/Kl + 
;er-Block mit Funkt.-Tasten im „IBM-look like” Gehäuse 
POLLO// ASKF (48K) w.o. + Disk II F + Contr 

Apollo II ASFK (48K) w.o.+2xDisk II-F+Contr. +12" Mon. 
ıtpreis f.o. Systeme von 48K zu 64K 

\ufpreis von 48K zu 64K +Z80 CPU 

Apollo Ile (64K) PAL vollbest. und geprüft 

Apollo lie (128K) +802/24Z-Karte geprüft 

Apollo lle ASKF 

Apollo Ile (64K) +Disk Il F+12" Monitor 


APPLE lie 128K+802/24Z Karte + Softw. 

Epson-Duodisk Il F-Slimline 2x143 KB mit Geh. + Kabel 
Disk//+Contr. + Kabel DOS 3.3 (Siemens) im Geh. 
Disk//(Siemens) im Geh. + Kabel 

Disk//F + Contr. + Kab. DOS 3.3 (1/2 Höhe) im Geh. 

Disk//F (1/2 Höhe) i. Geh. + Kabel (Trak Access <2 m S) 
Erphi DuoDisk 1,2 MByte incl. Netzteil + Erpli; AFPC 2-Contr. 


APPLESOFT + Turorial + Reference Manual eng! 
APPLE-DOS 3.3 Manual engl 

APPLE-DOS 3.3 Hb. dt 

APPLE-Pascal Reference + Operating Manual engl 
APPLE-Pascal Reference Hb. dt 

APPLE-Pascal Language Hb. dt 

APPLE-Fortran Manual engl 

CP/M-Softcard Vol. | + Il, Manual engl 

APPLE Il+Ile-Anwenderhandbuch deutsch (te-wi) 

280 Karte gepr. f. APPLE//c + RAM-Disk-Software + Hb. 
Macintosh System (128K) 

LEETSTTGE EST TEFAL) 

Macintosh Umrüstung von 128K auf 512K 

SANYO MSX-Computer MPL 64 dt. Tastatur 

Epson LX 80, 8 Bit/par. (Extra Traktor = 69,-) 

EPSON FX 85F/T+, 8bit/parallel 160 Z/S. NLQ + IBM Komp. 
EPSON FX 105+, 8bit/parallel 15” sonst w.o. 

EPSON Traktoraufsatz für FX 80 + FY 85 
APPLE/EPSON-Drucker Graphic-Interface + Kabel 
EP SEVEN AE ET SEI RE ERTL 
BROTHER-Typenraddr. HR 15XL Bbit/par. neuestes Mod 

AR SG10, NLQ- + IBM-Zeichensatz, Bbit/par 


Wir führen verschiedene Monitore von Zenith, Phillips und Sanyo mit Video - 
TTL (IBM Komp.) oder Coloreingang. 
Disketten in Box + Aufkleber I. Wahl, 10er Pack/100er Pack./ Stückpreis: 


5 :'Verstärkt BASF 3M FÜJI DATA NEUTRAL 
SCOTCH MAGNE- 
TICS 
1X, SS/SD 3,69/ 3,49 2,86/2,76 
1D, SS/DD 3,89/ 3,69 4,88/ 4,58 4,27/ 3,97 3,96/3,76 2,75/2,65 
2D. DS/DD 5,69/ 5,49 6,38/ 5,88 5,87/ 5,47 4,76/4,46 3,85/3,65 
1D/96TPi 5,59/ 5,39 7,18/ 6,68 
20/96TPi 7,09/ 6,99 7,88/ 7,48 7,87/ 7,67 
2HD/1.2MB 13,49/12,69 12,87/12,57 
1X. Hard 4,29/ 4,19 
1X. SS/SD 4,49/ 4,39 6,68/ 6,48 6,97/ 6,67 Das 
1D, SS/DD 4,79/ 4,59 8,58/ 8,28 - 
2D, DS/DD 7,09/ 6,89 9,88/ 9,58 10,17/ 9,77 sind 
1X, Hard 4,49/ 4,39 6,68/ 6,48 z 
3 Preise! 
Einseitig 10,99/ 9,99 10,08/ 9,88 7,67/ 7,47 
Zweiseitig 14,99/14,29 15,98/15,18 


3M-Scotch 5'/" Flüssig-Reinigungsset (2 Disk.) zweiseitig 48,95 
51/4” Disketten-Archivbox für 10 Disks (1 St./10 St.) 4,75/43,50 


51%” Disk-Karteikasten Kunststoff (ca. 80 Disk) 26,50 
514” Disk-Karteikasten Kunststoff (ca. 80 Disk) Rauchglas 39,95 


51%" Disk-K.K.Rauchglas, abschließb. (f. ca. 80-100 Disks) Lra) 
2000 Bi. Tabpapier (24 cm x 12” einf.) weiß oder grün/weiß perf. 45,-—- 
4000 Et.-Aufkl. doppelr. (107 x 36 mm auf 240 x 12” perf. Trägerp.) 66,50 
4000 Etik.-Aufkl. einreih. (107 x 36 mm auf 125 x 12” perf. Träg.) 65,-— 
OSZILLOSCOPE HAMEG ab Lager 
jei Vorauszahlung frei Empfangsstation unversichert in der BRD, ausgenom- 
en Papier und Etiketten, sonst N.N. + V.S. ab DM 30,-- Preise incl. MwSt 
Öffnungszeiten: Mo, Di, Do, Fr v. 10-18 h, Mi u. Sa v. 10-14 h, la Sa v. 10-18 h 
Telef. Best.: Mo, Di, Do, Fr von 10-19 h, Mi u. Sa wie Öffnungszeiten 
GEWÄHRLEISTUNG: 6 Monate, auf alle bei uns gekauften Geräte, durch 
ınsere eigene Service-Werkstatt 
REPARATUREN an Apple + Compatible Geräte + Zubehör führt unser 
5pezialistenteam garantiert zuverlässig + besonders kostengünstig aus 
Sprechen sie mit uns. Kostenvorschlag auf Wunsch! 


© 

electronic ; 
Telex: 07 72642 aaa-d 7b 
Habsburgerstraße 134 


7800 FREIBURG, Tel (0761) 276864 
Bauelemente - Bausätze - uP's 

Meßgerate - Zubehor - Fachlıteratur 

Fachgeschäft fur Elektronik + Miıkrocomputer 





















Der Apple Il als 
Werkzeug für den 
Betriebswirt 








Teil 1: Das Simplex-Verfahren 
in der Controllerpraxis 


Controller sind in der Regel keine As- 
semblerprogrammierer. Sie bedienen 
sich meist einer Hochsprache, vor- 
nehmlich eines BASIC-Dialektes (z.B. 
Applesoft-BASIC). Der Verfasser erläu- 
tert zuerst an einem kleinen Beispiel 
eine Aufgabe aus der Controllerpraxis 
und zeigt dann Möglichkeiten auf, die 
dem Controller die Arbeit erleichtern. 


1. Aufgaben des Controllers 


Die Position des Unternehmenscontrollers 
hat in den letzten Jahren eine beachtliche 
Aufwertung erfahren. Bei der Controller- 
funktion handelt es sich „um einen Lot- 
sen- oder Navigationsdienst zum Ziel Ge- 
winn. Der Controller ist also ein wirtschaft- 
licher Ratgeber des Managements. Seine 
Aufgabe besteht in der fachlichen Inter- 
pretation der Zahlen und betriebswirt- 
schaftlichen Zusammenhänge sowie in 
der Überzeugung und Motivation für die in 
den Zahlen liegenden Konsequenzen.“ 
(1) 

Mit dem gewachsenen Einfluß ist gleich- 
zeitig eine Steigerung der Arbeitsbela- 
stung verbunden. Deshalb haben sich im- 
mer mehr Controller einen Personalcom- 
puter angeschafft, von dem sie in erster 
Linie Robustheit, einfache Handhabung, 
Ausbaufähigkeit und Vielseitigkeit in der 
Anwendung erwarten. Der Apple Il hat seit 
seiner Markteinführung seinen außeror- 
dentlich hohen Nutzwert in der Controller- 
praxis unter Beweis gestellt. 

Das folgende kleine Beispiel, das ich aus 
(2) entnommen und aufbereitet habe, soll 
dem Außenstehenden einen Einblick in 
die Controllerpraxis vermitteln und den 
Nutzen einer Verbindung moderner Re- 
chenverfahren und Computeranwendung 
für das Unternehmen verdeutlichen. 


>6 


2. Ein fiktives Simplex-Beispiel 


Der Controller Kraus hat von der Ge- 
schäftsleitung der Schmalhans GmbH, 
Düsseldorf, den Auftrag erhalten, einen 
Vorschlag für eine rasche Gewinnverbes- 
serung auszuarbeiten. 

Die Ermittlungen von Kraus ergeben, daß 
die Schmalhans GmbH lediglich 4 Produk- 
te (P1-P4) auf 4 Fertigungsstellen (A-D) 
herstellt und verkauft. Die Situation der 
letzten Periode stellt sich dar wie in Abb. 1 
wiedergegeben. 

Das Unternehmen erzielte somit einen 
Gesamtdeckungsbeitrag in Höhe von 
DM 1.354.705 in der letzten Periode. Der 
Deckungsbeitrag ist die Differenz zwi- 
schen Nettoumsatz und variablen Kosten 
und soll die Fixkosten, die Steuern und 
den erhofften Gewinn abdecken. 

Bei der Datensichtung hat der Controller 
Kraus herausgefunden, daß die Markt- 
chancen der Schmalhans GmbH beträcht- 
lich größer sind, als der Geschäftsleitung 
bisher bekannt war. So halten die Verkäu- 
fer folgende Absatzhöchstmengen je 
Produkt für realisierbar: 

Pi max. 3500 Stück, 

P2 max. 9000 Stück, 

P3 max. 11000 Stück, 

P4 max. 2600 Stück. 


In Verbindung mit den nicht voll ausgela- 
steten Fertigungsstellen A-D eröffnet sich 
hier ein Ausweg für die Schmalhans 
GmbH. 

Kraus beschließt, das deckungsbeitrags- 
optimale Produktmix mittels der Sim- 
plex-Methode (lineare Programmierung) 
zu bestimmen. Ausgehend von den Daten 
der Vorperiode und den gerade ermittelten 
Absatzhöchstmengen, stellt Kraus sein 
Simplex-Tableau auf und lädt sein Opti- 
mierungsprogramm in den Apple Il+. Zu- 
erst dimensioniert er das Feld IB (9) und 
dann die Matrix A (9,13) und tippt dann die 
Daten ein. Die Matrix A (9,13) weist dann 





von Dipl.-Betriebswirt Willy Holtkamp 


das in Abb. 2 dargestellte Bild im Speicher 
auf (sinnbildlich). 

Die ersten 4 Zeilen beinhalten die Koeffi- 
zienten der Fertigungsstellen A-D und ge- 
ben den Zeitverbrauch je Produkt in Minu- 
ten an. Die Zeilen 5-8 berücksichtigen die 
Absatzhöchstgrenzen je Produkt wie oben 
besprochen. In der letzten Zeile sind die 
Deckungsbeiträge je Produkt vermerkt. 
Kurz nachdem der Controller Kraus 
„RUN“ getippt hat, liegt die optimale Lö- 
sung vor. Abb. 3 zeigt den Computer- 
Output, während Abb. 4 die Lösung in 
Tabellenform wiedergibt. 

Danach sollten von P1 insgesamt 2780 
Stück, von P2 insgesamt 4885 Stück, von 
P3 11000 Stück und von P4 insgesamt 
2315 Stück gefertigt und verkauft werden. 
Dies würde den Gesamtdeckungsbeitrag 
von DM 1.354.705 auf immerhin DM 
1.469.808 steigern (= 8,5% Steigerung). 
Aus der Tabelle ist weiterhin abzulesen, 
daß die Fertigungsstellen A, B, D voll aus- 
gelastet sind. Ein Vergleich der zu produ- 
zierenden Mengen mit den Absatzhöchst- 
grenzen zeigt, daß keine Absatzrestriktion 
verletzt wurde. Bei der Datenermittlung 
stellte Controller Kraus fest, daß dem spe- 
ziellen Deckungsbeitrag von Produkt P1, 
der später mit DM 459.895 errechnet wur- 
de, ein spezieller Fixkostenbetrag in Hö- 
he von DM 506.000 gegenüberzustellen 
ist. Daraus resultiert ein negativer Rest- 
deckungsbeitrag für das Produkt P1. Es ist 
also bald aus dem Produktionsprogramm 
zu nehmen. „Für die Abbaurechnung und 
die Abbauentscheidung kann die ‚Sim- 
plexmethode‘ wiederum wertvolle Infor- 
mationen liefern“ (2b). Hierbei gilt folgen- 
de Überlegung: Wenn die Summe der ent- 
fallenden speziellen, d.h. langfristig ab- 
baubaren Fixkosten — hier sind das DM 
506.000 — höher ist als die Summe fortfal- 
lender Deckungsbeiträge, dann würde die 
Abbauentscheidung das Unternehmens- 
ergebnis verbessern. 


Peeker 1/86 








Kraus stellt nun ein neues Simplex-Sche- 
ma auf und läßt dabei Produkt P1 und die 
Fertigungsstelle A außer acht. Das Ergeb- 
nis kann aus der Abb. 5 abgelesen 
werden. 


Der Gesamtdeckungsbeitrag ist von DM 
1.469.808 auf 1.049.942 gesunken, also 
um DM 419.866. Zieht man nun von den 
abbaubaren speziellen Fixkosten in Höhe 
von DM 506.000 diese wegfallenden Dek- 
kungsbeiträge von DM 419.866 ab, so er- 
hält man die Summe DM 86.134, die die 
Ergebnisverbesserung der Schmalhans 
GmbH darstellt. 


Dieses kleine Beispiel sollte zeigen, daß 
derjenige Unternehmer im Vorteil ist, der 
moderne Rechenverfahren und Computer 
benutzt. Immerhin kann die Schmalhans 
GmbH DM 1.469.808 - DM 1.354.705 = 
DM 115.103 in einem Monat mehr verdie- 
nen, ohne sich dabei groß anstrengen zu 
müssen. Multipliziert man diese Zahl mit 
11 Arbeitsmonaten, so erhält man eine Er- 
gebnisverbesserung von DM 1.266.133. 


3. Verbesserte Simplex- 
Berechnungen 


Im Normalfall sind die zu bearbeitenden 
Matrizen beträchtlich größer als soeben 
dargestellt. Mit zunehmender Matrixgröße 
steigt der Rechenaufwand und damit auch 
der Zeitbedarf, und zwar überproportional 
zur Matrixausdehnung. So sind z.B. Mehr- 
perioden-Optimierungsmodelle mit 100 
Zeilen zu je 120 Spalten keine Seltenheit. 
Und wenn die Frage geklärt werden muß, 
welche Produkte in Werk 1 und welche 
Produkte in Werk 2 am kostengünstigsten 
gefertigt werden können, dann wird die 
Bearbeitung noch umfangreicherer Matri- 
zen notwendig. 


Bei derartigen Aufgabenstellungen treten 
dann schnell die konzeptionsbedingten 
Nachteile des Apple II+ zutage, nämlich 
lediglich 64K RAM und eine durchschnittli- 
che Rechengeschwindigkeit, gemessen 
an neueren Produkten der Computerindu- 
strie. 


Diese Feststellung bedeutet jedoch nicht 
zwangsläufig, daß der Apple-Benutzer mit 
seinen Problemen allein gelassen wird 
und deshalb zurückstecken muß. Er sollte 
die nachstehend aufgeführten Hinweise 
berücksichtigen. Diese Tips lassen sich 
wie folgt gruppieren: 


1. Hardware-Verbesserung anschaffen 
(Saturn-128K-Karte und Accelerator- 
Karte); 


2. Software-Unterstützung anschaffen 
(Cruncher, Compiler und EMBER); 


Peeker 1/86 





Abb. 1 


(1) (2) (3) (4) A (4) B (4) C (4) D 
Stückz. DM/St. Total Min/St. Min Min/St. Min Min/St. Min Min/St. Min 


1 2599 165,43 413575 8,058 20145 9,198 278 9,121 303 90,412 1939 
2 5909 67,88 339410 9,009 d 1,458 7290 1,180 5900 90,092 469 
3 19009 31,62 316200 9,909 d 0,433 4330 0,374 3740 D,064 649 
4 2009 142,76 285520 9,000 d 0,136 272 0,149 298 5,918 11836 
(5): 19599 1354705 20145 12162 10241 13966 
Kapazität: 22400 1250® 1199 16909 
Schlupf: (Leerzeiten in Minuten) 2255 338 759 2034 
Auslastung in %: 89,93 97,30 93,1% 87,29 
(1) = Produktbezeichnung, (2) = Ist-Absatz, (3) = Deckungsbeitrag, 
(4) = Fertigungsstelle, (5) = Summe 
Abb. 2 
2240% 8,058 9 ") Ö 


ıB8B 88 88 8 o 
12599 0,108 1,458 9,43 d,136 do ı8 88 8 98 od 
11099 Ö,121 1,1808 9,374 8,193 9 oo ı8 8 8 od © 
16099 9,4112 9,092 GB,064 5,918 do dB ı 198 898 Ö 


3599 | ® ® 1% BB 19899 
9999 " N! ® ® Bee BB 8 ı9 98 
11999 ® ") 1 " DB 98 98 19 
2699 ® ® ® 1 ve 8 oo Oo ı 


Ö 165,43 67,82 31,62 la, 8 8 8 8 8 do 9 


Abb. 3 
SCHMALHANS GMBH 


ERMITTLUNG DER OPTIMALEN LOESUNG 
NACH GERH. NIEMEYER 


OPTIMUM NACH 4 DURCHLAEUFEN GEFUNDEN: 


BASISVARIABLE WERT: 


Hr 
DOS OANSIDH 
ee | | Be | Ba | En u u 

I 

u 

a 

m 

oO 


rm 


DER GESAMTDECKUNGSBEITRAG BETRAEGT 1469488.92 DM! 


Abb. 4 


Optimallösung-Plan 1 (gerundet) 


(1) (2) (3) (4) A (4) B (4) C (4) D 
Stückz. DM/St. Total Min/St. Min Min/St. Min Min/St. Min Min/St. Min 


1 2780 165,43 459895 8,058 22401 9,198 300 9,121 336 ®,412 1145 
8 4885 67,88 331604 9,P09 Ö 1,458 7122 1,180 5764 0,092 449 
3 11909 31,62 347820 9,00% d 0,435 4763 0,374 4114 9,064 1704 
4 2315 142,76 339489 9,009 d 0,136 315 9,149 345 5,918 13799 
(5): 29989 1469898 22401 1259® 10569 15999 
Kapazität: 22400 12599 11909 1609 
Schlupf: (Leerzeiten in Minuten) -1 1) 759 l 
Auslastung in %: 100,01 190,00 96,09 99,99 


1) = Produktbezeichnung, (2) = Planabsatz, (3) = Deckungsbeitrag, 
= Fertigungsstelle, (5) = Summe 


praxis 94 


57 








3. Programme schneller machen (opti- 
mieren). 


3.1. Saturn- und Accelerator-Karte 


Die Saturn-128K-Karte besteht aus 8 Bän- 
ken mit je 16K und kann sowohl als Pseu- 
do-Disk als auch im gemischten Dienst 
eingesetzt werden. Das bedeutet, daß 
Programmteile und/oder Felder (Arrays) in 
das Extended RAM ausgelagert und bei 
Bedarf wieder zurückgeholt werden kön- 
nen, während die Pseudo-Disk-Funktion 
nicht beeinträchtigt wird. Leider ist das 
Handbuch (3) für „Applefreaks“ geschrie- 
ben, so daß der Controller eine Weile be- 
nötigen wird, ehe er diese vielen Möglich- 
keiten richtig ausnutzen kann. 

Am einfachsten ist die Anwendung der 
128K-Karte in Verbindung mit Visicalc, 
weil hier nur eine spezielle Disk gebootet 
und einmalig angepaßt werden muß. Die 
Accelerator-Karte wurde bereits im Peeker 
(Heft 1/84, S. 19) beschrieben und ihre 
außerordentliche Wirkung wird im Verlaufe 
dieses Berichtes noch sichtbar werden. 
(Redaktioneller Hinweis: Der Autor be- 
nutzt einen Apple II+ mit einer Accelerator 
II+; der erwähnte Testbericht bezog sich 
auf die Accelerator Ile.) 


3.2. EMBER-Software und Compiler 


Fachleute schlagen vor, möglichst viele 
Befehle in einer Zeile unterzubringen. Die- 
se Aufgabe erfüllt z.B. der Dakin5-Crun- 
cher (4) sehr gut. Die Bedienung ist ein- 
fach: Man bootet die Dakin5-Diskette und 
wählt aus einem Menü die 12 aus. Nach 
ca. 10 Sekunden erscheint die in Abb. 6 
wiedergegebene Anleitung auf dem Bild- 
schirm. 

Ich besitze sowohl den Hayden+-Compi- 
ler (5) als auch den Tasc-Compiler (6). 
Normalerweise benutze ich für meine Ar- 
beit den Hayden+, da er noch einfacher 
zu bedienen und vor allem sehr viel 
schneller ist, was die Vorbereitungszeit 
(Compiletime) und die Verarbeitungszeit 
(Runtime) angeht. 

So benötigt der Tasc-Compiler z.B. für 
eine Optimierungsaufgabe des Umfangs 
27 Zeilen und 47 Spalten mit einem BA- 
SIC-Programm des Autors Frazer (7) ins- 
gesamt 250 Sekunden Compiletime + 
195 Sekunden Runtime = 445 Sekunden 
Gesamtzeit bei Einsatz der Accelerator- 
Karte. Der Hayden + -Compiler benötigt 
dagegen nur 31 Sekunden an Compile- 
time und 102 Sekunden an Runtime = 133 
Sekunden Gesamtzeit. Allerdings ist das 
vom Hayden+ erzeugte Binärprogramm 
erheblich länger als das des Tasc-Compi- 
lers. 


58 


I EEE 


Abb. 5 


Optimumlösung-Plan 2 (gerundet) 


(1) (2) (3) (4) B (4) C (4) D 
Stückz. DM/St. Total Min/St. Min Min/St. Min Min/St. Min 











2 5073 67,88 344365 1,458 7396 1,189 5986 9,092 467 
3 11999 31,62 347820 9,433 4763 9,374 4114 9,064 794 
4 2506 142,76 357757 0,136 341 9,149 373 5,918 14831 
(5): 18579 1049942 12590 19474 16091 
Kapazität: 12599 11999 16999 
Schlupf: (Leerzeiten in Minuten) 1) 526 -1 
Auslastung in %: 109,00 95,21 190,01 
(1) = Produktbezeichnung, (2) = Planabsatz, (3) = Deckungsbeitrag, 
(4) = Fertigungsstelle, (5) = Summe 
Abb. 6 


*%* THE CRUNCHER %*%* 
(C) 1979 BY DAKINS CORPORATION 
l. LOAD THE PROGRAM TO BE COMPRESSED 
2. CALL 36361 TO RUN THE CRUNCHER 
3. SAVE THE COMPRESSED PROGRAM 


4. CALL 36492 TO RETURN TO PROGRAMMING 
AIDS 3.3 MENU 








Abb. 7 
Block Autor Acc. Compile Run Total 
(sec) (sec) (sec) 
l Niemeyer optimiert ja 25 22 47 
Niemeyer ja 27 22 49 
Gillett ja 27 44 =i 
Bui ja 48 73 121 
Frazer ja 31 192 133 
Poole ja 37 73 11® 
2 Niemeyer optimiert 25 59 75 
Niemeyer 27 SL 78 
Gillett 27 120 147 
Bui 48 213 261 
Frazer 31 321 352 
Poole 37 206 243 
3 Niemeyer optimiert Ja 61 
Niemeyer ja 75 
Gillett ja 206 
Bui ja 385 
Frazer ja 502 
Poole Ja 551 
4 Niemeyer optimiert 204 
Niemeyer 261 
Gillett 684 
Bui 1298 
Frazer 1798 
Poole 1874 
Abb. 8 
Autor Block Nr. 4 Block Nr. 1 Faktor 
(ohne Hilfsm.) (Acc. + Comp.) 
(sec) (sec) 
Niemeyer optimiert 204 47 4,34 
Niemeyer 261 49 5,58 
Gillett 684 Tl 9,63 
Bui 1298 121 10,73 
Frazer 1798 133 12,84 
Poole 1874 11® 17,83 





EMBER (8) steht für „Extended Memory 
Interpreter“ und kann für den Apple Il, II+ 
und Ile verwendet werden, und zwar mit 
oder ohne Language Card. EMBER kann 
insgesamt 4 Megabytes verwalten. Laut 
Handbuch (9) kann der Anwender Felder 
(Arrays) dimensionieren, die bis zu 64K 
groß sind, so daß 

a) Integer-Arrays bis zu ca. 32.000 Ele- 
mente, 

b) Real-Arrays bis zu ca. 12.000 Elemente, 
c) String-Arrays bis zu ca. 16.000 Elemen- 
te umfassen dürfen. 

Dabei bleibt es dem Anwender überlas- 
sen, ob er die ganze 128K-Karte für EM- 
BER reservieren möchte (insgesamt 
166.397 Bytes Speichergröße) oder nur 
bestimmte Bänke. Definiert man nur 3 
Bänke und die Language Card für EMBER- 
Zwecke, so stehen insgesamt 84.477 
Bytes Speicherplatz zur Verfügung. Laut 
Handbuch plaziert EMBER die Variablen in 
das Extended RAM, während der Pro- 
grammtext in die unteren 48K geschoben 
wird. Die Speicherbelegung kann aus dem 
Handbuch (10) entnommen werden. 

Wie simpel die Benutzung von EMBER ist, 
zeigt die nachstehende Beschreibung zur 
Vorgehensweise: 


1. Phantom-Null-Diskette (für Accelerator) 
in Drive 1 einlegen und Apple einschalten. 
2. Nachdem das rote Licht am Drive er- 
löscht ist, „S“ tippen. 

3. Nachdem das rote Licht am Drive er- 
löscht ist, Phantom-Null-Diskette heraus- 
nehmen und die EMBER-Kopie in Drive 1 
einlegen. Dann die Leertaste drücken. 

4. EMBER meldet sich mit einigen Erläute- 
rungen und dem folgenden Menü: 


(1) Ember set-up 
(2) Install EMBER 
(3) Make back-up copy 


„1“ <Return> eingeben. Es erscheint das 
nächste Menü: 


(1) Look at Ember memory set-up 
(2) Set-up EMBER memory usage 
(3) Install Ember 

(4) Exit 

„2“ <Return> eingeben. Menü Nummer 
3 erscheint mit einer Inhaltsübersicht Slot/ 
Bank. Darunter erfolgt eine Abfrage: 


(1) Change slot contents 
(2) Exit 
Which option? 


„1“ <Return> eingeben. Nun muß die 
Frage nach dem Slot beantwortet werden. 
Hier wird immer ein „O“ <Return> erfor- 
derlich sein, da entweder eine Language 


Peeker 1/86 


Card oder ein anderes Memory Board in 
Slot 0 stecken muß. Da mein Apple Il+ 
sowohl mit einer Language Card als auch 
mit einem Saturn-128K-Board bestückt 
ist, tippe ich hier eine „O“ und drücke die 
Return-Taste. 

Wiederum erfolgt eine Abfrage: 


(1) 128K RAM card (3) 32K RAM card 
(2) 64K RAM card (4) 16K RAM card 
What is now in the slot? 


Dabei blinkt der angesprochene Slot 0. Mit 
„4“ <Return> wird in Slot O der Besitz 
einer 16K-RAM-Card vermerkt. Die Frage: 
„Do you want to use the entire card?“ wird 
mit „Y“ <Return> beantwortet und das 
Programm zeigt wieder die Abfrage: 


(1) Change slot contents 
(2) Exit 


„1“ <Return> eingeben, wenn „Which 
option?“ erscheint. Die Frage nach dem 
gewünschten Slot „Which slot (8=aux)?“ 
wird mit „4“ <Return> beantwortet, weil 
meine 128K-RAM-Karte in Slot 4 steckt. 
Das bereits bekannte Menü 


(1) 128K RAM card (3) 32K RAM card 
(2) 64K RAM card (4) 16K RAM card 
What is now in the slot? 


wird mit „1“ <Return> beantwortet. Die 
Frage „Do you want to use the entire 
card?“ hat ihre Berechtigung. Denn wenn 
man jetzt „Y“ <Return> tippt, dann wer- 
den in Slot 4 alle 8 Bänke der 123K-RAM- 
Card für EMBER reserviert, und es stehen 
insgesamt 166.397 Bytes zur Verfügung. 
Antwortet man aber mit „N“ <Return>, 
wird jede einzelne Bank abgefragt und das 
Ergebnis in Slot 4 vermerkt. 

Das folgende Menü 


(1) Change slot contents 
(2) Exit 


wird mit „2“ <Return> beantwortet, wo- 
durch sich Drive 1 in Bewegung setzt. 
Nachdem das rote Licht am Drive erlöscht 
ist, steht das folgende Menü auf dem Bild- 
schirm: 


1) Look at Ember memory set-up 
2) Set-up Ember memory usage 
3) Install Ember 

4) Exit 


Mit „3“ <Return> wird der Installations- 
prozeß abgeschlossen und die Anzeige 
„Ember installed“ zeigt dies auch. 


5. RUN Programmname <Return> startet 
dann das eigentliche Programm. 


4 PRAXIS Ez 


EMBER gestattet das Anlegen einer Turn- 
key-Version, so daß der eben beschriebe- 
ne Vorgang sich auf das Booten der Phan- 
tom-Null- und der Turnkey-Diskette be- 
schränkt. Dann kann sofort das gewünsch- 
te Programm gefahren werden. 

EMBER zeichnet sich durch eine ausge- 
sprochen einfache Bedienungsweise und 
eine enorme Leistungsfähigkeit aus. So 
braucht sich der Benutzer keinerlei Ge- 
danken über das Bank-Switching zu ma- 
chen, denn EMBER nimmt ihm derlei Ar- 
beit ab. 

Programme dieser Art sind Anwendern zu 
empfehlen, die nicht programmieren, son- 
dern den Apple Il+ als Arbeitswerkzeug 
benutzen wollen. 

Bei den nachfolgenden Anwendungen hat 
sich herausgestellt, daß die Arbeitsge- 
schwindigkeit nicht von der Anzahl der von 
EMBER benutzten Bänke abhängt. 


3.3. Applesoft-Verbesserung 


Die unter (11) bis (16) aufgeführte Litera- 
tur empfiehlt für Applesoft-Programme 
u.a.: 

1) Variablen anstatt Fließkomma-Konstan- 
ten benutzen. 

2) Soweit als möglich sollte man Werte vor 
Beginn einer Schleife definieren. 

3) FOR-NEXT-Schleifen sollten ohne 


Schleifen-Variablennamen enden, also 
statt NEXT I sollte man nur NEXT 
schreiben. 


4) Unterprogramme und Zieladressen von 
GOTO-Befehlen sollte man an den Pro- 
grammanfang verlegen. 

5) Variablen sollten zu Programmanfang 
initialisiert werden. 

6) Zuweisungen sollte man mit dem LET- 
Befehl versehen. 

7) IF-THEN-Abfragen sollte man möglichst 
lange „falsch“ sein lassen. 

8) Möglichst kleine Zeilennummern ver- 
wenden. 

9) REM-Zeilen weglassen. 

10) Möglichst viele Befehle in einer Zeile 
unterbringen (Crunchen). 


Ich habe einige dieser Vorschläge auf ihre 
Wirkung bei meinem Simplex-Optimie- 
rungsprogramm Niemeyer (17) überprüft, 
soweit sie nicht schon berücksichtigt wa- 
ren. Das Programm Niemeyer benötigt in 
Verbindung mit der Accelerator-Karte 74 
Sekunden für eine Matrix A (27,47). Die 
Rechenzeit kann um 11 Sekunden auf 
nunmehr 63 Sekunden gesenkt werden, 
wenn die Vorschläge Nr. 3 und Nr. 6 bei 
der Codierung berücksichtigt werden. Die 
Wirkung ist in etwa 50 zu 50. Wenn man 
das Weglassen des Schleifen-Variablen- 
namens im optimierten Programm rück- 
gängig macht, kann man genau ersehen, 


59 


TE [ss rrr© be en 





daß das Programm nunmehr ca. 5,5 Se- 
kunden (Stoppuhr) mehr benötigt. 

Die vorgeschlagene Initialisierung der Va- 
riablen direkt zu Programmbeginn führte 
zu einer Verringerung des Ausführungs- 
geschwindigkeit; benötigte der Apple bis- 
her nur 63 Sekunden, so waren es jetzt auf 
einmal 7/0 Sekunden. (Anm.d.Red.: Wenn 
einfache Variablen nach der Dimensionie- 
rung von Arrays angelegt werden, so müs- 
sen alle Felder im Speicher nach oben 
verschoben werden, da einfache Variablen 
stets unterhalb der Felder liegen.) Auch 
die Wirkung des Crunchens konnte ermit- 
tet werden. Das Ausgangsprogramm 
brauchte nach dem Crunchen nur noch 65 
Sekunden, also immerhin eine Verbesse- 
rung um 9 Sekunden. Wird das bereits 
erwähnte Programm nach der Optimierung 
(Vorschläge Nr. 3 und Nr. 6) gecruncht, so 
zieht dies eine weitere Abnahme der Re- 
chenzeit auf 61 Sekunden nach sich. 


4. Geschwindigkeitsvergleiche 


Als ich die erste Optimierungsaufgabe in 
der Praxis lösen mußte, war kein BASIC- 
Programm verfügbar. Das von mir darauf- 
hin erstellte Optimierungsprogramm be- 
nötigte für eine Matrix A (27,47) immerhin 
2 volle Stunden. Das Warten auf die opti- 
male Lösung bewog mich zu ausgedehn- 
ten Suchaktionen in Universitätsbibliothe- 
ken und Computershops. 

Die nachfolgend unter (17) bis (21) näher 
bezeichneten Simplex-Programme haben 
eines gemeinsam, nämlich den Aspekt der 
Anschaulichkeit, während dabei die Verar- 
beitungsgeschwindigkeit in den Hinter- 
grund tritt. Die Tabelle in Abb. 7 beweist, 
daß erhebliche Zeitunterschiede in der 
Bearbeitung einer Matrix der Größe 27 
Zeilen und 47 Spalten (Standardproblem 
Maximierung) zu verzeichnen sind, je 
nachdem welches Simplex-Optimierungs- 
programm ausgewählt wird. Weiterhin wird 
die Wirkung von Compilern (hier Hay- 
den+) und der Accelerator-Karte deutlich. 
Vergleicht man nun die Blöcke 4 und 1 
miteinander, wie in Abb. 8 geschehen, 
dann kann man am Faktor die Geschwin- 
digkeitsverbesserung je Programm able- 
sen. Auch die Wirkung von Compiler bzw. 
Accelerator-Karte kann isoliert werden. 
Beträgt die MatrixgrößBe etwa 70 Zeilen 
und 120 Spalten, dann genügt selbst ein 
DOS-Mover nicht mehr, um den benötig- 
ten Speicherplatz zur Verfügung zu stel- 
len. In einem derartigen Fall wird man mit 
der 128K-Karte von Saturn gute Ergebnis- 
se erzielen. Am einfachsten ist die Anwen- 
dung des EMBER-Programms, denn nach 
dem Starten der Phantom-Null-Diskette 
(wegen der Accelerator-Karte) und der be- 
reits erwähnten EMBER-Turnkey-Diskette 


60 


stehen immerhin max. 166.397 Bytes zur 
Verfügung, wobei allerdings bedacht wer- 
den muß, daß EMBER Felder (Arrays) mit 
max. 64K erlaubt. 

Wählt man das Simplex-Programm von 
Poole aus, so liegt die Lösung erst nach 
ca. 17 Stunden und 57 Minuten vor. Dage- 
gen benötigt der Apple unter den gleichen 
Voraussetzungen mit dem Programm von 
Gillett nur noch 8 Stunden und 7 Minuten. 
Das normale, also nicht optimierte Nie- 
meyer-Programm wirft nach 1 Stunde und 
59 Minuten die optimale Lösung aus, und 
das optimierte Niemeyer-Programm 
braucht nur 1 Stunde und 37 Minuten un- 
ter den gleichen Umständen. Würde man 
beim optimierten Niemeyer-Programm auf 
die Accelerator-Karte verzichten, so wür- 
de man ca. 5 Stunden und 22 Minuten 
warten müssen (Faktor 3,32). 


5. Fazit 


Dem Unternehmenscontroller steht heute 
eine Reihe von Möglichkeiten offen, um 
„als betriebswirtschaftlicher Begleiter für 
das Management“ (22) noch effizienter 
tätig werden zu können als in der Vergan- 
genheit. Der Apple II+ oder Ile bietet mit 
seinen Erweiterungen die Chance, wirkli- 
ches „Gewinnmanagement“ (23) zu be- 
treiben. 


Literaturverzeichnis 


(1) Deyhle, Dr. Albrecht, Controller Hand- 
buch, Management Pockets 11, S. 123, 2. 
überarb. u. erw. Aufl. 1980, Management 
Service Verlag, Gauting/München. 

(2) Schwarz, Prof. Dr. Horst, Kostenträger- 
rechnung und Unternehmensführung, Ka- 
pitel Bestimmung eines optimalen Produk- 
tionsprogramms, S. 88-97, 2. Aufl. 1973, 
Verlag Neue Wirtschafts-Briefe, Herne/ 
Berlin. 

(2a) Ich habe die Daten übernommen und 
die Tabellen der S. 88 entsprechend ange- 
paßt. 

(2b) Zitat von S. 96. 

(3) Saturn System, Ann Arbor, USA. 

(4) Dakin5 Corp., Denver, USA. 

(5) Hayden’s Basic Compiler + (hier Hay- 
den+-Compiler genannt), Hayden Soft- 
ware, Lowell, USA. 

(6) Microsoft Tasc The Applesoft Compi- 
ler, Microsoft, Bellevue, USA. 

(7) Frazer, Ronald J., Angewandte lineare 
Programmierung, S. 69-70, Verlag Berlin 
Union, Stuttgart. (Ich habe das Simplex- 
Programm von Fortran in Applesoft umge- 
schrieben.) 

(8) EMBER 1983, Micro Solutions; 1983, 
Titan Technologies. 

(9) EMBER-Manual, S. 1, (von mir über- 
setzt). 


(10) EMBER-Manual, S. 6. 

(11) Feichtinger, Herwig, Effiziente BA- 
SIC-Programmierung, S. 23-24 aus Hob- 
by-Computer 2, Funkschau Sonderheft 
Nr. 30, 3. überarb. Aufl., Franzis Verlag, 
München 1980. 

(12) Applesoft Basic Programming Refe- 
rence Manual, S. 120, Appendix E: Spee- 
ding up your program. 

(13) Bartley, David / The Apple-Dillo, Pro- 
gram Optimization, A Call A.P.P.L.E. Tuto- 
rial, S. 9-12, Call A.P.P.L.E., Mai 1982. 
(14) Thomas, Dieter, Schnellere Basic- 
Programme, MC, S. 32-33, Heft 7/1982, 
Franzis Verlag, München. 

(15) NN, Optimieren von Programmen. 
Dem Rechner die Sporen geben, Chip, 
Heft 12, 1981, Vogel Verlag, Würzburg. 
(16) Wagner, Roger, Speeding in Ap- 
plesoft, S. 32-33, Call A.P.P.L.E. In Depth 
Number One, All About Applesoft. 

(17) Niemeyer, Dr. Gerhard, Einführung in 
die lineare Planungsrechnung mit ALGOL- 
und FORTRAN-Programmen, Verlag Wal- 
ter de Gruyter, Berlin 1968. 

(18) Ich habe das „FORTRAN-Programm 
für Standard-Maximum-Probleme (regulä- 
re Simplex-Methode)“ auf S. 200-201 und 
232-233 dargestellt, in Applesoft-BASIC 
übersetzt und eine optimierte BASIC-Fas- 
sung geschrieben. 

(19) Gillett, Ph.D., Billy E.; Introduction to 
Operations Research, S. 100-105, 
McGraw-Hill, New York 1976. 

(20) Bui, X.T., Kapitel 2 Lineare Program- 
mierung: Die Simplex-Methode, S. 21-32 
aus Planen und Entscheiden mit BASIC, 1. 
Aufl. 1983 Sybex-Verlag, Düsseldorf. (Ei- 
ne sehr anschauliche und besonders 
empfehlenswerte Einführung in die Sim- 
plex-Methode und ihre BASIC-Program- 
mierung!) 

(21) Poole, Lon/Borchers, Mary, Some 
Common BASIC Programs, 3. Aufl., S. 
103-107, Verlag Osborne/McGrawhill, 
Berkeley, USA. 

(22) Deyhle, Dr. Albrecht/Bösch Martin, 
Arbeitshandbuch Gewinnmanagement, S. 
12, Verlag Moderne Industrie 1979. 

(23) ebenda, S. 13. 

(24) Fa. Pandasoft, Berlin, bietet genauso 
wie (25) EMBER an, EMBER kostet It. 
Preisliste vom 1.7.85 DM 198, -. 

(25) Fa. Weiss, Wilhelmshaven. 


Hinweis zum 2. Teil 


Als zweiter und abschließender Teil ist ein 
Beitrag zum Thema „Matrizenrechnung in 
der betriebswirtschaftlichen Praxis“ vor- 
gesehen, der voraussichtlich im März-Heft 
erscheinen wird. 


4‘ 


Peeker 1/86 








4hobby9g4 


Grafik-Demonstrationen 


Das nachfolgend abgedruckte Programm 
GRAFIK.DEMOS.2 ist die Fortsetzung 
von „Grafik-Demonstrationen” aus 
Peeker, Heft 8/85, Seite 67. Der Zweck ist 
der gleiche geblieben. Es wird dargestellt, 
wie mit möglichst geringem Programmier- 
aufwand möglichst effektvolle HGR-Grafi- 
ken entstehen. Wesentlichster Uhnter- 
schied zu Teil 1 ist, daß die Pot-Punkte in 
den einzelnen Abschnitten nicht mehr di- 
rekt als feste Zahlenwerte, sondern alle als 
Variablen angesteuert werden. Alle Plot- 
Variablen stehen am Ende des Pro- 


GRAFIK.DEMOS.2 


1ß0® REM Ralf Knoke 

101® REM Juli 1985 

1029 : 

1030 REM kick Teil la aka 
104® GOSUB 2659 

10850 HGR2 : HCOLOR= 7:AZ = 3:02 = 32 
106 IF BZ = 2 THEN AZ = 1: 
1078 FOR X = 1 TO CZ 


1080 HPLOT A,B TO Al,C: HPLOT D,B TO D1,C: HPLOT D,Bl TO 


Dl,E: HPLOT A,Bl TO Al,E 


109908 B=B - AZ::Al = Al + AZ:D1 = D1 - AZ:Bl = Bl + AZ 


1108 NEXT X 


111® IF BZ = 2 THEN HPLOT G,E: GOTO 269® 


1120 REM kick Teil 1b ea 


Peeker 1/86 


HCOLOR= ®:CZ = 96 


Teil 2 von Ralf Knoke 


gramms. Die Variablen erscheinen sinn- 
voll, da praktisch alle Werte mehrmals ver- 
wendet werden. Alles übrige ist gleich ge- 
blieben, ausgenommen natürlich die Grafi- 
ken selbst. Dadurch entfallen diesmal 
auch alle weiteren Erklärungen und es ist 
nur noch viel Spaß zu wünschen! 


MEER 
UENEEEEN 
IE SAHRR 


NER ‚ll 

re 

>; 4 ' 
h 


17, 


GET A$ 
GOSUB 265% 


Kurzhinweise 


1. Zweck: 

Demonstration effektvoller Grafiken 
2. Konfiguration: 

II+, Ile oder IIc; 

DOS 3.3 oder ProDOS 

3. Test: 

RUN GRAFIK.DEMOS.2 

4. Sammeldisk: 

GRAFIK.DEMOS.2 
(Applesoft-Programm) 


FOR X = 1 TO 96: 
HPLOT A,B TO Al,C: HPLOT D,B TO D1,C: HPLOT D,B TO 
D1,E: HPLOT A,B TO Al,E 


A=A+H 1:Al 


NEXT X 


=4Al+2:D=D-1:Dl=Dl-2 


REM *#xxxx%xx%x%* Teil 2 Krk 


GET A$ 
GOSUB 265% 
HGR2 


: HCOLOR= 7 
HPLOT G2,C TO G2,E: HPLOT C,B TO F,B 


FOR X = 1 TO 16 


G2,C+3 


HPLOT G2,C + 3 TO G + 8,B TO G2,E - 3 TO Gl - 8,B TO 


C=C+6:6=G+838:E=E-6:61=G1l-38 


NEXT X 





61 


1280 
1299 
1308 
1319 
1329 
1339 
1349 
1359 
1369 
1379 
1389 
1399 
1409 
1419 
1429 
1430 
1440 


1459 


1469 
1470 


1489 


1499 
1599 
151® 
1529 
1539 
1549 


1559 
1560 


1579 


1589 
1599 
1699 
1619 
162 
1639 
1649 


1659 
1669 
1670 
1689 
1699 
1709 
1718 
1729 
1738 
1749 
1759 
1769 
177 
1780 
1799 
1809 
1819 
1829 
1839 
1849 
1859 
1860 
1879 
1880 
1890 
1999 
1919 
192 
1930 
1949 
1959 
196 


1979 
1989 
199 
2000 
2019 


REM #*##kkkkK%%* Teil 3 3akakakakakakakakakk 
GET A$ 

BZ =1 

HGR2 : HCOLOR= 7:AZ = 19 

GOSUB 2659 


FOR X = 1 TO 29 


IF BZ = 1 THEN HPLOT A,B TO G,AB TO AC,B 
IF BZ = 2 THEN HPLOT G,AB TO A,B TO G,H 
IF BZ = 1 THEN AB=AB + AZ 

IF BZ=2 THENA=A+AZ 

NEXT X 

BZ = BZ + 1: IF BZ = 2 GOTO 1329 


REM *###x###%#%* Teil 4 akakakakakakakakakık 

GET A$ 

GOSUB 2659 

HGR2 : HCOLOR= 7 

HPLOT AE,C TO Z,C1 TO D1,Y1ı TO D1,AH TO Z,E TO AE,E TO 
Al,AH TO AL,YA TO AE,C1 TO G,Y TO Z,C TO Z1,Y TO D1,Y1 
TO Z1,B TO D1,AH TO Z1,AI TO Z,E TO G,AI TO AE,E TO 
AG,AI TO Al,AH TO AG,B TO Al,Yı TO AG,Y TO AE,C 

HPLOT G,Y TO G,AI: HPLOT Z1,Y TO AG,AI: HPLOT Z1,B TO 
AE,B: HPLOT Z1,AI TO AG,Y 

FOR X = 1 TO 32 

HPLOT G,Y TO AE + 2,C: HPLOT Z1,Y TO Z + 2,C1l +2: 
HPLOT Z1,B TO D,Y1 + 2: HPLOT Z1,AI TO D1 —- 2,AH + 2: 
HPLOT G,AI TO AE + 2,E: HPLOT AG,AI TO Al + 2,AH + 2: 


HPLOT AG,B TO A,Yl + 2: HPLOT AG,Y TO AF - 2,C1l + 2 
AE=AE + 2:2 = 2Z + 2:Cl = Cl + 2:Yl = Yl + 2:Dl =Dl - 
2:AH = AH + 2:Al = Al + 2:AF=AF-2 

NEXT X 

REM ##xkxKK%% Teil 5 3akakakakakakakakakık 

GET A$ 

GOSUB 265% 

HGR2 : HCOLOR= 7 


HPLOT A,C TO D,C TO D,E TO A,E TO A,C TO D,E: HPLOT D,C 
TO A,E 

FOR X = 1 TO 23:AZ2 = 4 

HPLOT A + AZ,C TO G — AZ,Bl - AZ TO Al,C1l + AZ: HPLOT D 
— AZ,C TO Gl + AZ,Bl - AZ TO D1,C1 + AZ: HPLOTD - AZ,E 
TO Gl + AZ,B + AZ TO DL,El - AZ: HPLOT A + AZ,E TOG - 
AZ,B + AZ TO Al,El - AZ 


A=AH+A2:G=G - AZ:Bl = Bl - AZ:C1l = Cl +AZ:D=D- 
AZ:Gl = Gl + AZ:B=B + AZ:ElL = El - AZ 

NEXT X 

REM xx Teil 6 3 akakakakakakakakakk 

GET A$ 

GOSUB 2659 

HGR2 : HCOLOR= 7 


FOR X = 1 TO 12:AZ2 = 3 

HPLOT G,B TO R,S TO R,T TO D,B TO R,S TO R,T TO G,B TO 
U,V TO G,C TO TO 
A,B TO Y,S TO TO 
U,Z TO 

Ss=S+t 
NEXT X 
REM #*#xxx##%x%%* Teil 7 aakakakakakakakakakık 
GET A$ 

GOSUB 2659 

HGR2 : HCOLOR= 7:AZ = 3 

HPLOT A,C TO A,B TO D,B TO D,E 
FOR X = 1 TO 28 

HPLOT D,B TO Al,B2 - AZ 


” 


’ 


V TO j » 
‚3 T0 

B 

Z 


U,V TO W,V TO G,B v.,T OR T8 
G,B TO W,Z2 TO U,Z G,E TO W,Z TO 


n<= 


:T=T-AZ:U=U+rAZ:NWN = 


HPLOT A,B TO D1,Bl + AZ 

D=D - 7:B2 =B2 - 3:Bl =Bl +3:A=A+7 
NEXT X 

REM xxx Teil 8 3 akakakakakakakakakrk 

GET A$ 

GOSUB 265® 


HGR2 : HCOLOR= 7:AZ = 4 

FOR X = ® TO 69 

HPLOT C,C1 TO F,E TO F,Cl 

IF X < 48 THEN HPLOT F1,C TO Cl,El TO Fl,El 


C=tC+H+HAZ:F=F- AZ:El =El - AZ 
NEXT X 

REM *#*xx%k%%*%*%* Teil 9 3eakakalalakakakakr 

GET A$ 

HGR2 : HCOLOR= 7:AZ = 4:BZ = 1:C0Z = 24 
GOSUB 2659 

FOR X = 1 TO CZ 


HPLOT G,B TO G1,B TO G1,B1 TO G,Bl TO G,B 


G=G-AZ:B=B-AZ:Gl = Gl + AZ:Bl = Bl + AZ 
NEXT X 
BZ =BZ +1 


IF BZ = 2 THEN HCOLOR= ®: GOTO 1899 


IF BZ = 3 THEN HCOLOR= 7:CZ = CZ « 2:AZ = AZ - 2: GOTO 
1899 

REM ka Teil 1 akakakakakakakakik 

GET A$ 

HGR2 : HCOLOR= 7:AZ = 4:BZ = 1:02 = 1 

GOSUB 2649 


FOR X = 1 T0Ol 


2029 
2039 


2040 
2059 
2069 
2079 
2089 
2090 


2199 
2119 
2129 
2130 
2140 
2159 
2169 
2179 
2189 
2190 
2209 
2219 
2220 
2239 
2240 
2259 
2260 
2279 
2280 
2299 
2309 
2319 
2320 


2339 
2349 
2359 
2369 
2370 
2380 
2399 


2400 
2410 
2420 
2439 
2449 
2450 
2460 
2470 
2480 
2490 
2599 
2519 
2529 
2539 


2549 
2559 


2569 


2579 
2589 
2599 
2609 


2619 
2629 
2639 
2649 
2659 


2669 


2679 





HPLOT G,B TO G1,B TO G1,Bl TO G,Bl TO G,B 

HPLOT G2,B — 2 TO Gl + 2,B2 TO G2,Bl + 2 TO G — 2,B2 TO 
G,.B-2 

NEXT X 

BZ =BZ2 +1 

IF CZ > 23 GOTO 2119 


IF BZ = 2 THEN HCOLOR= 9: GOTO 2919 
IF BZ = 3 THEN HCOLOR= 7: GOTO 2®1® 
IF BZ = 4 THEN BZ = 1: HCOLOR= 7:6 =G - AZ:B=B- AZ: 


Gl = Gl + AZ:Bl = Bl + AZ:CZ = CZ + 1: GOTO 2019 
REM ###kKk%%%* Teil 11 aaa 

GET A$ 

HCOLOR= 7 

GOSUB 265% 

FOR X = ß TO 191 

HPLOT C,Cı TO F,Cl 

HCOLOR= ®: HPLOT C,C1 TO F,Cl 
clı=cCli+l1l 

HCOLOR= 7: NEXT 

REM x#xxx##%%% Teil 12 sea 

GET A$ 

GOSUB 2659 

HGR2 : HCOLOR= 7:AZ = 2 

FOR X = 1 TO 96 

HPLOT A,C TO D,E: HPLOT D1,C1 TO Al,El 


A=A+rAZ:D=D- AZ:C1l = Cl +AZ:El = El - AZ 
NEXT 

REM xxx %+%* Teil 13 Krk 

GET A$ 

GOSUB 2659 

HGR2 : HCOLOR= 7 


FOR X = 1 TO 32 

HPLOT C,C TO C1,B TO G,C 
HPLOT F,C TO C1,B TO F,E 
Cl = Cl + 9: NEXT 

REM *#HHkHkkkk Teil 14 sera 
GET A$ 

GOSUB 2669: HGR2 
FOR X = 1 TO 16 
BZ = AL - Al 
HPLOT AJ,AK TO AJ — BZ,AK TO AJ — BZ,AK - BZ TO AJ,AK - 
BZ TO AJ,AK TO AL,AK TO AL + BZ,AK TO AL + BZ,AK - BZ 
TO AL,AK -— BZ TO AL,AK TO AL,AM TO AL + BZ,AM TO AL + 
BZ,AM + BZ TO AL,AM + BZ TO AL,AM TO AJ,AM TO AJ - 
BZ,AM TO AJ — BZ,AM + BZ TO AJ,AM + BZ TO AJ,AK 


: HPLOT C,E TO C1,B TO G,E: 


: HCOLOR= 7 


AJ =AJ — 2:AK = AK — 2:AL = AL + 2:AM = AM + 2 
NEXT 

REM aaa Teil 15 eakeakakakakakakakk 

GET A$ 

GOSUB 2659: HGR2 : HCOLOR= 7 

HPLOT C,AN TO G,AO TO F,AN 

FOR X = 1 TO 34 

HPLOT C + 4,AN- 4 TO G +4,A0 +4 
C=CH+HA4:AN=AN - 4:6 =G+4:M0 =AO +4 
NEXT 

REM x*xx###%%%* Teil 16 3akakakakakakakakık 

GET A$ 

GOSUB 2659: HGR2 : HCOLOR= 7 


HPLOT C,B TO AP,AR TO AQ,AS TO F,B TO AQ,AR TO AP,AS TO 
C,B 

FOR X = 1 TO 17 

HPLOT C,B TO AP,AR TO G,B TO AQ,AR: HPLOT C,Bl TO AP,AS 
TO G,Bl TO AQ,AS 


C=C+4:AP=AP+4:B=B-A:AR=AR +4:G =G + 4: 
Bl = Bl + 4:AS = AS - 4 AQ = AQ +4 

NEXT 

REM xxxkkkk%%* Teil 17 aakakakakakakakk 

GET A$ 

HOME : TEXT : VTAB (19): HTAB (5): PRINT "BITTE 


WAEHLEN:": PRINT : 
PRINT "(2) ENDE" 
PRINT : GET A$ 

IF A$ = "1" OR A$ = '"J" GOTO 1949 
HOME : END 


PRINT "(1) NOCH EINMAL?": PRINT : 


REM #3 Initialisierung *** 

A= 43:Al = 43:B = 95:Bl = 95:B2 = 95:B3 = 95:C = G:C1l 
= :D = 235:D1 = 235:E = 191:El = 191:F = 279:F1 = 279: 
G = 139:G61 = 139:G2 = 139:H = 199 

R = 215:S = 69:T = 139:U = 194:V = 19:W = 174:Y = 63:Y1 
= 63:2 = 171:Z1 = 171:AB = 1:AC = 234:AE = 107:AF = 
107:AG = 107:AH = 127:AI = 127:AJ = 138:AK = 94:AL = 
149:AM = 96:AN = 165:A0 = 26:AP = 69:AQ = 2B8:AR = 25: 
AS = 165 

RETURN 


Zeile 2390 muß ohne Leertasten eingegeben werden, 
da sie ansonsten nicht in den Eingabepuffer paßt. 


Peeker 1/86 








Ein neues Bildgefühl 


Wenn bis zu 512 digitalisierte Fernseh- 
oder Videobilder auf dem Monitor eines 
Apple Il das Laufen lernen und dabei ein 
Tempo von bis zu 13 Bildern pro Sekunde 
erreichen, dann steckt des Rätsels Lösung 
nicht in der „neuen“ Firmenpolitik des 
Konzerns mit dem gestreiften Apfel auf 
dem Surfsegel, sondern im Slot 7 der im- 
mer noch aktuellen Wozniak-Maschine. 
Für diesen Slot wurde im Berliner Inge- 
nieur-Büro M. Fricke eine neue Digitalisie- 
rungskarte entwickelt, die sich durch zwei 
besondere Qualitäten von allen bisherigen 
Karten dieser Art unterscheidet: 

1. Das von der Karte empfangene Videosi- 
gnal wird in 384 x 320 Bildpunkten digitali- 
siert, also 16K Bildinformation, was erheb- 
lich mehr ist, als sonst in der Apple-Klasse 
geboten wird und jeglicher weiteren Bear- 
beitung eine solide Ausgangsbasis ver- 
schafft. 

2. Das Video-1000-Interface unterstützt 
von sich aus RAM-Karten bis 1 MByte; 
eine Fähigkeit, die erstaunliche Möglich- 
keiten eröffnet, wie z.B. serielle Digitalisie- 
rungsvorgänge und Ganzbild-Animation. 


Kabelsalat als Vorspeise 


Bis die Karte allerdings ihre Vorzüge dem 
Benutzer unter Beweis stellen kann, lernt 
dieser erst einmal ihre Unzulänglichkeiten 
kennen. Auf der kleinen, sehr sauber ver- 
arbeiteten Interfaceplatine sind 3 Cinch- 
Eingänge so dicht nebeneinander mon- 
tiert, daß die im Videobereich üblichen 
Cinch-Stecker mit Metallummantelung 
nicht genügend Platz finden. In eine derart 
engstirnige Raumaufteilung lassen sich le- 
diglich plastikumfaßte Billigstecker in Reih 





Now it’s looking at you, kid. 


Peeker 1/86 











4 TESTDERICHTE 


Video-Clips 
für 
jedermann 





Die Video-1000-Karte 


Erfahrungsbericht von Norbert Man Brandl 


und Glied bringen. Doch welche Kamera, 
welcher Videorecorder verfügt zur Zeit 
noch über solche zierlichen Zuführungen? 
Mir ist klar, daß dem Normen-Dschungel 
der Videohersteller nicht mit einfachen 
Mitteln Paroli zu bieten ist, doch sollte man 
dessen Existenz nicht völlig außer acht 
lassen. Deswegen lautet mein Vorschlag 
an die Video-1000-Entwickler: Cinch-Ein- 
gänge nicht direkt auf die Platine löten, 
sondern durch kurze Zuleitungen bis an 
die Rückwand des Computers herausführ- 
bar gestalten. Außerhalb des Computers 
ist jedenfalls mehr Platz für dicke Video- 
Kupplungen und Kabel. 

Obwohl ich von Berufs wegen seit Jahren 
mit Video arbeite und über eine beträchtli- 
che Anzahl verschiedener Kabel und 
Stecker verfüge, eilte ich also, mit dem 


Remember Paris? 


Ladenschlußgesetz als unsichtbarem Da- 
moklesschwert über dem Haupt, durch die 
Videoabteilungen des Fachhandels, um 
mir die zierlichsten Cinch-Stecker, die auf- 
findbar waren, zu besorgen. 

Zwei Stunden später und fünfzig Mark är- 
mer war es mir endlich gelungen, die Vi- 
deo- und die Computerwelt zufriedenstel- 
lend zu verbinden. Drei Kabel fanden sich 
nach einigem Widerstand mit der Enge im 
Inneren des Computers ab. Das eine war 
über Adapter und Verlängerung mit einem 
Videorecorder verbunden. Das zweite war 
bereit, das Videosignal aus dem Apple auf- 
zunehmen, es durch die Karte zu schleifen 
und über das dritte Kabel an den Monitor 
abzugeben. Dieses auf den ersten Blick 
etwas umständlich wirkende Verbindungs- 
system befreit von dem Zwang eines 





63 








zweiten Kontrollmonitors und läßt den 
Computer ohne zusätzliche Schalt- oder 
Umstöpselmanöver seine sonstigen An- 
wendungen wie gewohnt abarbeiten. 


Anm.d.Red.: Die Firma Hamaphot KG, 
Monheim (Bayern), hat uns ihren neuen 
640seitigen Farbkatalog „hama photo + 
video. Das große Neuheitenprogramm im 
Zubehör-Ratgeber 1985/86“ zugesandt, 
der für eine Schutzgebühr von DM 10,- 
erhältlich ist und u.a. seitenweise Cinch- 
Stecker aller Art und Größe beschreibt. 


Euphorie und Bilderfieber 


Nach einem letzten, flüchtigen Blick auf 
die zwei beidseitig mit Matrixdruck gestal- 
teten DIN-A4-Blätter, die, nicht ohne den 
Leser mit einigen köstlichen Tippfehlern 
zu unterhalten, in knapper und sachlicher 
Form über Bedienung und Möglichkeiten 
der Karte Auskunft geben, bootete ich die 
mitgelieferte Diskette und erlebte, wie 
schnell sich anfänglicher Ärger in nachhal- 
tige Zufriedenheit verwandeln kann. 

Software und Karte bilden zusammen ein 
verblüffend schnelles Werkzeug. Die Be- 
dienungsschnittstelle ist kinderleicht zu 
handhaben. Sobald die Frage nach einer 
etwaigen RAM-Karte negativ beantwortet 
ist, liegt das Videosignal ohne Grauwerte 
sofort auf dem Monitor vor. Andernfalls 
müssen Slot und Größe der RAM-Erweite- 
rung dem Programm mitgeteilt werden. Mit 
den Pfeiltasten ist die Helligkeit des Video- 
bildes einstellbar, wodurch selbst kon- 
trastarme oder schlecht ausgeleuchtete 
Videovorlagen in den Griff zu bekommen 
sind. Eine fest implementierte Alternative 
zu dem normalen Schwarz-Weiß-Strich- 
bild stellt das Punktrasterbild dar, das über 


die Taste „P“ anwählbar ist. Die Rasterung 
bietet eine einfache Art, Grauwerte vorzu- 
täuschen. Ob nun im Raster- oder Strich- 
modus, ein Druck auf die Taste „R“ digita- 
lisiert das Bild und schreibt es sowohl in 
das Video-1000-RAM als auch in den 
Hauptspeicher des Computers, von 
$4000-$7BFF. Weil demzufolge der Be- 
reich der zweiten hochauflösenden Seite 
belegt ist, wird ein Ausschnitt des digitali- 
sierten Bildes über die erste HGR-Seite 
angezeigt. Dieser Ausschnitt ist mit Hilfe 
der vier Pfeiltasten (Apple II+: A = auf- 
wärts, Z = abwärts) über das gesamte 
16K-Bild „verschiebbar“, indem die ent- 
sprechenden Bildteile in die HGR-Seite 
übertragen werden. Dieser Vorgang ist 
sehr schnell und macht die Wanderung 
über das digitalisierte Großbild zu einer 
vergnüglichen Entdeckungsreise. Besteht 
der Wunsch, das ganze Bild auf einen 
Blick zu sehen, kann ein Rasterbild mit 
„Otrl-P“ und ein normales Strichbild mit 
„Ctrl-N“ auf die Dimensionen der HGR- 
Seite verkleinert werden. Sowohl die Aus- 
schnitte als auch die Verkleinerungen sind 
in jeweils 34-Sektoren-Binärdateien auf 
Diskette speicherbar und für übliche Gra- 
fik- und Drucksoftware zugänglich. Die 
16K-Bilder müssen hingegen mit „Otrl-S“ 
und einer Nummer von 1 bis 8 auf geson- 
derte Disketten geschrieben werden, die 
keinen „CATALOG“ besitzen und maxi- 
mal 8 ausschließlich über Nummern iden- 
tifizierbare Bild-Dateien beinhalten. Die er- 
ste dieser großen Binärdateien belegt 
Track 3-6, die zweite Track 7-11 usw. bis 
Datei Nr. 8, die sich von Track 31 bis Track 
34 erstreckt. Die Geschwindigkeit, mit der 
diese Jumbo-Files geschrieben und mit 
„Otrl-L + Nummer“ gelesen werden, hat 
mich beeindruckt. 





Da weder Inhaltsverzeichnisse noch Bil- 
dernamen den Benutzer durch eine 
schnell wachsende Sammlung abgespei- 
cherter Video-1000-Bilder lotsen, sollte 
der Griff zur klassischen Kombination aus 
Bleistift und Papier als Gedächtnisstütze 
nicht allzuspät erfolgen. Es ist übrigens die 
einzige Zettelwirtschaft, die tastaturver- 
wöhnten Fingern abverlangt wird, denn 
sämtliche Befehlsfolgen und Informatio- 
nen über den Status praesens des Sy- 
stems sind über eine Hilfsseite ein- 
blendbar. 

Wie nützlich die stets aktuellen Nachrich- 
ten der elektronischen Help-Page sein 
können, wurde mir erst bewußt, als ich 
zum ersten Mal eine 512K-RAM-Karte mit 
ins Video-1000-Spiel einbrachte. Der zu- 
sätzliiche Speicherbereich, den man der 
Digitalisierungsarbeit zur Verfügung stel- 
len kann, wird nämlich vom System aus 
genauso gehandhabt wie physische Dis- 
ketten. Daraus ergibt sich einerseits die 
Schwelle von mindesten 128K auf einer 
RAM-Karte, um überhaupt für das Video- 
1000-System von Interesse sein zu kKön- 
nen, und andererseits die Unterteilung der 
größeren RAM-Karten, die ja — wie ein- 
gangs erwähnt — bis in den 1MByte-Be- 
reich hinein akzeptiert werden, in jeweils 
128K-Blocks. Schon in der von mir gete- 
steten Konfiguration standen also 4 Blocks 
für insgesamt 32 16K-Bilder zur Verfü- 
gung. Bewegen sich hierbei die Wünsche 
und Bedürfnisse des Anwenders auf der 
voll automatisierten Arbeitsebene, die das 
Video-1000-Interface bietet, braucht kein 
Gedanke über Blockzuweisung und Bild- 
nummer verschwendet zu werden. Mit 
dem Befehl „Ctri-R“ digitalisiert die Karte 
selbständig Bilderfolgen in einem Zeittakt 
von 4 Bildern pro Sekunde, solange die 





I stick my neck out for nobody. 


64 


The beginning of a beautiful friendship... 


Peeker 1/86 








zugewiesene Speicherkapazität ausreicht. 
Das Abspielen der Bilderfolgen wird durch 
den Befehl „Ctri-F“ erreicht. Beides ver- 
wandelt den Apple in eine ungeahnt flinke 
Bildermaschine. Sobald aber Anwendun- 
gen zu bewältigen sind, die das Transferie- 
ren, Abrufen oder Einsortieren einzelner 
Bilder innerhalb der erweiterten Speicher- 
struktur unumgänglich machen, ist es not- 
wendig, eine genaue Information über den 
gerade aktiven RAM-Block zu besitzen. 
Ob nun das Neuausrichten der Videoka- 
mera, das Suchen bestimmter Szenen auf 
dem Videoband oder andere notwendige 
Tätigkeiten den schnellen Arbeitsfluß, den 
die Karte ermöglicht, unterbrechen und die 
Konzentration ablenken — die Taste mit 
dem „?“ hilft stets weiter. Ein Blick auf die 
Hilfsseite bringt den aktiven Speicherblock 
wieder in Erinnerung und unterstreicht die 
freundliche Qualität einer Help-Page, die 
ihre Aufgabe diskret und bedarfsgerecht 


BEIBETSIHEISWAR eTS]alelza ar: 1ielzie) 


640 Seiten, randvoll Tips 
und über 1800 farbigen Abbildungen. 


104.0,(0, 37.0. 2,0) 





Apple DOS 3.3 — 


erledigt, ohne die Arbeitsfläche eines klei- 
nen 8-Bit-Systems mit Symbol-Girlanden 
und Rollmenüs zu belasten. 


Und wie geht’s weiter? 


Bereits die Grundkonfiguration aus Inter- 
face und Software liefert genügend Argu- 
mente, die das Video-1000-System so- 
wohl im Hobby- als auch im Profibereich 
hohem Anspruch gerecht werden läßt. Voll- 
ends aus dem Kreis der Mitbewerber hebt 
sich das System durch seine außerordent- 
lich flexiblen Ausbaumöglichkeiten hervor. 
Das Ingenieur-Büro M. Fricke liefert ein 
breites Spektrum von RAM-Karten, die 
das beste mir bekannte Preis/Leistungs- 
verhältnis auf dem deutschen Markt vor- 
weisen können. Darüber hinaus sorgen 
die Berliner Hersteller auch für die soft- 
waremäßige Zukunft ihres Systems. Drei 


} ERDFAHKO 
f 
| Verbindungskabel »Video« 
j . wu 
$ 4 £>3 
7 Ihe 
Pi Stecker F.-Stecke 
310 :; 3 
192 55 Im 
Bm Mm 
er en, 
9.0 
jr; 8 PR NOS her 
4108 :4; 
au 
ArB 25 
r 
be} # 
=, 
Cine ec ı -Atecker 
3139 :4 
3112 5 
235 8 
ei IN 
“ ud 
sch ten - BNC-BIMCKe 
ar15 i4 
nr7 
6% 





IR 
Sie 
x, 





Tips und Tricks 


TESTDERICHTE 4.4 


weitere Software-Pakete werden ab No- 
vember 1985 die Video-1000-Möglichkei- 
ten potenzieren. Es handelt sich hierbei im 
einzelnen um 

— ein Programm zur Digitalisierung von 
Video-Standbildern in bis zu 16 Graustu- 
fen und deren Ausgabe in hoher Matrix- 
druckaualität, 

— eine Sammlung von Hires-Utilities zur 
komplexen Nachbearbeitung der digitali- 
sierten Vorlagen und schließlich um 

— RAM-Karten unterstützende Software, 
die aus laufenden Fernseh-, Videoband- 
oder Kamera-Aktionen bis zu 512 Bilder 
digital umwandelt und als Computer-Clips 
vorführt. 

Das sensationellste an der Video-1000- 
Geschichte ist jedoch der Preis. Für nur 
ca. DM 300,- läßt das Video-1000-System 
die hellsten Weihnachtsglöckchen erklin- 
gen, und das völlig unabhängig von Kalen- 


dervorschriften. , 


Video 


P-Stecker - „FE Starker 
was 4 Im Di 295 
Sm DM 1248 


3147 iu Im DRE 14,86 


j 
i 
; 


: Antennenkabel »Video« 
. 
Par Stecker = PAL-Buchse Tenncal 


us 9 dm ; s zu 858 


Antennenkupplungen 


/ Ä 
“ ® 


i PA Stecker » PA -Bresker 
I MM IE Amunnanaieune baxiaı) DM E08 


: PA Buches = PAL-Buchwe 
1.3891 129 Antennenbunnse (kommalı DM 300 


| Verbindungskabel 
ı »Viden-AV« Scart 
en 


Wmsssen 
rag ur 


me wi 






ale ir TI ich Buypiattenr- 
Zu Resort 





un U 





Die völlig überarbeitete dritte Auflage (mit neuer Begleitdiskette) erscheint Anfang 1986. 


Dr. Alfred Hüthig Verlag - Postfach 10 2869 - 6900 Heidelberg 





Peeker 1/86 


65 








The Write Choice 


Ein preiswertes Textverarbeitungsprogramm 


Erfahrungsbericht von Franz-Josef Hüskens 


Für den Apple Il gibt es inzwischen 
zahlreiche Textverarbeitungspro- 
gramme. Das bekannteste dürfte 
wohl „Wordstar“ sein. Mit einem 
Preis von über 1000,- DM schreckt 
es jedoch sicherlich viele Privat- 
leute und Kleingewerbetreibende 
ab. 

Von der Firma Apple selbst wird 
der „Applewriter“ sowie die in 
„Appleworks“ integrierte Textver- 
arbeitung angeboten. Die hierfür 
verlangten Preise von ca. 500,- 
bzw. über 800,- DM sind auch 
nicht von Pappe. Voraussetzung 
für die Anschaffung von derart teu- 
ren Textverarbeitungs-Program- 
men ist eine kommerzielle und/ 
oder häufige Nutzung. Für die ge- 
legentliche Anwendung im Heim- 
bereich oder in kleineren Betrie- 
ben muß jeder Anwender für sich 
selbst entscheiden, ob sich eine 
derart kostspielige Anschaffung 
lohnt. 

Es gibt jedoch auch sehr preiswer- 
te Textverarbeitungsprogramme, 
die fast das gleiche leisten. Eines 
dieser „billigen“ Systeme soll hier 
vorgestellt werden. 

Es handelt sich um The Write 
Choice, vertrieben von der Firma 
Roger Wagner, deren Inhaber 
langjährigen Apple-Besitzern kein 
Unbekannter sein dürfte: Von ihm 
stammen die Programmsammlung 
Apple-Doc und verschiedene an- 
dere Softwarepakete. Außerdem 
ist er als Buchautor hervorge- 
treten. 


„Write Choice“ besteht aus vier 
Teilen: 

— Word Processing Style Manual 
(im 152seitigen Handbuch ent- 
halten) 

— The Analyst 

— Tut’s Typer 

— The Correspondent (Hauptpro- 
gramm) 


1. Word Processing Style 
Manual 


Das „Word Processing Style Ma- 
nual“ ist Teil des Handbuchs und 
erklärt auf ca. 50 Seiten, wie man 
einen guten Stil schreibt, und gibt 
Tips für Geschäftsbriefe, Manu- 
skripte usw. Da das Programm aus 
Amerika kommt, ist es auf die eng- 
lische Sprache ausgerichtet. Man 
kann damit also sein eigenes Eng- 
lisch auffrischen oder als Schüler 
seine Sprachkenntnisse vertiefen. 


66 


2. The Analyst 


Der „Analyst“ ist ein Programm, 
das die Lesbarkeit eines Textes 
untersucht. Dazu werden im Text 
verschiedene Werte, die für die 
Lesbarkeit relevant sind, festge- 
stellt. Das Programm scheint je- 
doch nicht richtig zu arbeiten, da 
es manchmal sehr seltsame Resul- 
tate anzeigt. Dieser Text sollte ein- 
mal aus über 20.000 Wörtern be- 
stehen, dann aus etwa 19 000. Die 
vermutlich (und hoffentlich) richti- 
gen Werte wurden nach mehrmali- 
gem Probieren angezeigt. Das 
Programm ist für meine Begriffe 
eine Spielerei mit wenig Nutzen. 


3. Tut’s Typer 


„Tut's Typer“ ist ein Hires-Grafik- 
Programm, das auf unterhaltsame 
Weise einen „Schreibmaschinen- 
kurs“ bietet und zusätzlich durch 
ein Spiel die Schreibfähigkeit trai- 
niert: 


a) Der erste Teil des Programms 
benutzt die Hires-Grafik-Fähigkei- 
ten des Apple, um die Tastatur auf 
dem Bildschirm abzubilden. An- 
hand dieser Grafik-Tastatur wird 
die richtige Plazierung der Finger 
auf den Tasten geübt und mit ver- 
schiedenen Lektionen die richtige 
Bewegung der Finger auf der Ta- 
statur gezeigt. Nach Beendigung 
jeder Lektion erhält man einen 
Ausdruck über die Anzahl der feh- 
lerhaften Buchstaben bzw. der fal- 
schen Wörter. Gehört man bereits 
zu den fortgeschrittenen Maschi- 
nenschreibern, so wird dieses Pro- 
gramm schnell langweilig, weil es 
zu langsam ist. Schnelleres 
Schreiben ist wegen der zeitrau- 
benden Darstellung der Tastatur 
auf dem Bildschirm unmöglich. 


b) Der zweite Programmteil ist für 
fortgeschrittene Schüler gedacht. 
Hier kommt es auf Geschwindig- 
keit an. Man findet sich als „Spie- 
ler“ in den Labyrinthen der Pyrami- 
de des Pharao Tut wieder. Im er- 
sten Korridor des Labyrinths tau- 
chen Wörter auf, die eingetippt 
werden müssen. Gelingt dies 
nicht, bevor ein Wort das Ende des 
Korridors erreicht hat, so ver- 
schwindet es wieder. Andernfalls 
taucht es in einem zweiten, später 
in einem dfritten Korridor auf usw. 
Jedesmal muß das Wort vor sei- 


nem Verschwinden eingegeben 
werden. Auf den ersten Blick 
scheint dies kein Problem zu sein. 
Bei einem Wort! Es bleibt jedoch 
nicht dabei, denn in regelmäßigen 
Abständen tauchen immer mehr 
Wörter auf. Nach einer gewissen 
Zeit wird das „Spiel“ beendet, das 
Ergebnis angezeigt und auf Disket- 
te festgehalten. Mit diesem Pro- 
grammteil können Wettkämpfe 
zwischen bis zu 25 Teilnehmern 
ausgetragen werden. Damit keine 
Langeweile aufkommt, können 
auch neue Lehrstücke aufgestellt 
werden. In dem 12seitigen Anhang 
des Handbuches wird erklärt, wie 
man neue Lektionen mit dem 
„Correspondent“ entwickelt. 


4. The Correspondent 


Der „Correspondent“ ist das 
„Herz“ des Programmpakets. Es 
ist das eigentliche Textverarbei- 
tungsprogramm mit folgenden 
Merkmalen: 


Horizontales Scrollen: Der ein- 
gegebene Text wird auf dem Bild- 
schirm so angezeigt, wie er auch 
später auf dem Papier zu sehen ist. 
Das Besondere dabei ist, daß die 
Anzeige sowohl mit der 80-Zei- 
chenkarte als auch im 40-Z/Z-Mo- 
dus möglich ist. Die maximale Zei- 
lenlänge ist frei wählbar. Ohne 80- 
Zeichenkarte beträgt sie 80 Zei- 
chen; mit entsprechender Hard- 
ware (9 80-Z/Z-Karten werden un- 
terstützt) können maximal 160 Zei- 
chen pro Zeile bearbeitet werden. 
Mit der Videx-Ultraterm-Karte kann 
eine Zeile angeblich bis zu 255 
Zeichen lang sein! Ist die Zeile län- 
ger, als es die Anzeigekapazität 
zuläßt, wird trotzdem alles zeilen- 
richtig wiedergegeben. 

Der auf dem Bildschirm angezeigte 
Ausschnitt bewegt sich entspre- 
chend der Cursorposition in die lin- 
ke bzw. rechte Hälfte des Textes. 
Mit Ctrl-O kann man sich — unab- 
hängig von der momentanen Cur- 
sorposition — den nicht sichtbaren 
Textteil ansehen. Durch eine stän- 
dig eingeblendete Statuszeile 
wird man über die aktuelle Position 
des Cursors im Text informiert. An- 
gezeigt wird die Seite, die Zeile 
und die Spalte, in der sich der Cur- 
sor befindet. Die Statuszeile gibt 
auch Auskunft über den Modus, in 
dem gerade gearbeitet wird (Edit 
bzw. File-Modus). Eine Tabulator- 
zeile wird am Anfang einer jeden 
Seite angezeigt. In dieser Zeile 
können mit Ctrl-S Tabulator- 
Stopp-Punkte beliebig gesetzt 
oder gelöscht werden. Ein Stern in 
der Mitte der Tabulatorzeile zeigt 


die tatsächliche Mitte der Textseite 
an. 


Eingabe-Modus: Die Texteingabe 
erfolgt so, wie man es von anderen 
Textverarbeitungsprogrammen her 
gewohnt ist: Ein Drücken der Re- 
turn-Taste ist nur am Ende eines 
Absatzes nötig. Falsche Buchsta- 
ben werden einfach durch Über- 
schreibung berichtigt. Die Formatie- 
rung des Textes erfolgt „wort-rich- 
tig“ direkt auf dem Bildschirm. Das 
Programm erkennt automatisch, 
wenn ein Wort nicht mehr in die 
laufende Zeile paßt, und springt 
dann selbsttätig zum Anfang der 
folgenden Zeile. Wird die Tren- 
nung von Worten gewünscht, so 
muß der Trennstrich von Hand ein- 
gegeben werden. Der „Corre- 
spondent“ erkennt ihn am Zeilen- 
ende und formatiert entsprechend. 


Im Editier-Modus kann der Cursor 
beliebig im Text bewegt werden. 
Die Tasten Ctrl-U, Ctri-H, Ctrl-J 
und Ctri-K erlauben neben den 
Pfeiltasten die Bewegung des Cur- 
sors nach rechts, links, unten und 
oben. Für die schnelle Überbrük- 
kung größerer Entfernungen im 
Text kann man mit Ctrl-T zum 
nächsten Tabulator-Stopp sprin- 
gen. Ctrl-Y bewegt den Cursor 
zum nächsten Wort. Abhängig von 
der zuletzt gedrückten Pfeiltaste 
(rechts, links) sind diese „weiten 
Sprünge“ in beide Richtungen 
möglich. Mit Ctri-B springt man 
zum Textanfang, mit Ctrl-E zum 
Textende. Mit Ctrl-V kann man sich 
die letzte durchgeführte Änderung 
im Text anzeigen lassen. 

Der „Correspondent“ hat folgende 
Editier-Befehle: Fehlende Wörter 
werden mit Ctrl-| in den bestehen- 
den Text eingefügt, falsche Wörter 
mit Ctrl-G gelöscht, falsche Zei- 
chen mit Ctrl-R entfernt. Der letzte 
Befehl dient auch zur Formatierung 
des Textes. Ctrl-Z löscht den Text 
einer Zeile ab der Cursorposition. 

Weitere Kommandos sind: Ctri-C 
zur Zentrierung einer Zeile, Ctrl-D 
zur Duplizierung des zuletzt einge- 
gebenen Zeichens. Mit Ctri-F kann 
man Zeichenfolgen suchen und 
auch austauschen lassen. Die 
ESC-Taste wird bei älteren Apple- 
Modellen zur Eingabe von Groß- 
buchstaben benutzt. Die Eingabe 
der deutschen Sonderzeichen 
(äöüß) in Groß- und Kleinschrei- 
bung ist bei den älteren Apple-Mo- 
dellen normalerweise nicht mög- 
lich. Durch ein vorangestelltes 
Ctrl-A können auch diese Sonder- 
zeichen eingegeben werden. Ctrl- 
A ermöglicht ferner die Eingabe 
von inversen (Ctrl-A |), blinkenden 
(Otrl-A F) und normalen (Ctrl-A N) 
Zeichen. Damit lassen sich also 
auch Ctrl-Zeichen (blinkend) ein- 


Peeker 1/86 


0000 He ss euer 





Verschiedene Drucker 


geben. 
werden damit steuerbar. 


Die gleichen und noch weitere Be- 
fehle stehen auch im File-Modus 
zur Verfügung. Den File-Modus 
schaltet man mit Ctrl-X (aus dem 
Editier-Modus heraus) an. Die zwei 
wichtigsten Befehle sind G (Get a 
file = Text laden) und S (Save afile 
= Text speichern). Des weiteren 
ist es möglich, den Anfang und das 
Ende des Textes zu setzen (Ctrl-B, 
Ctrl-E). Mit Ctrl-P kann der Text 
ausgedruckt werden. Steht eine 
80-Zeichenkarte zur Verfügung, so 
kann der Text mit der Tastenfolge 
ESC Ctri-P auf dem Bildschirm 
„probegedruckt“ werden. Vor dem 
Ausdruck kann man die Papierlän- 
ge, den linken Rand, die unterste 
Zeile usw. festlegen. Das Ver- 
schieben und Kopieren von Text- 
blöcken ist ebenfalls möglich, fer- 
ner die Eingabe normaler DOS- 
Kommandos. 


Weitere Merkmale des „Corre- 
spondent“ sind: Eingegebener 
Text kann als Binär- oder als Text- 
file auf Diskette gespeichert wer- 
den. Da nur fünf bzw. — bei Ver- 
wendung der 64K-Karte — sieben 
Seiten Text im Speicher abgelegt 
werden können, gibt es die Mög- 
lichkeit, verschiedene Files unter- 


einander zu einem großen Text zu 
verbinden. Diese Einzeltexte wer- 
den nicht nur hintereinander ge- 
druckt, sondern können auch mit 
der Such-Routine kontinuierlich 
durchsucht werden. Sogar die 
Such- und Tausch-Routine arbeitet 
dann richtig, so daß nach einem 
Tausch erst der neue Text auf Dis- 
kette gespeichert und dann der 
neue File geladen wird. Das Zu- 
sammenfügen verschiedener Tex- 
te ist ebenso möglich wie das 
Speichern von Teilen des Gesamt- 
textes. 

Mit dem gesondert erhältlichen 
Software-Paket „The Printogra- 
pher“ kann man sogar Grafik in 
den Text einbinden. 


Hilfe-Seiten dienen als Gedächt- 
nisstütze, da man die vielen Mög- 
lichkeiten, die der Correspondent 
bietet, nicht alle auswendig wissen 
kann. Von Hause aus wird das Pro- 
gramm mit sieben Hilfe-Seiten ge- 
liefert. Zusätzlich wird jedoch im 
Handbuch beschrieben, wie man 
selbst derartige Seiten aufstellt 
und speichert. 

Das mitgelieferte Handbuch er- 
klärt die Benutzung anhand von 
Beispielen auf 60 Seiten sehr aus- 
führlich. In den verschiedenen An- 
hängen wird zudem beschrieben, 


Hard- und Software zum Apple lic 


zusammengestellt von 
Matthias Pohl 


Die nachfolgenden Produkte, die 
speziell für den Apple Ilc entwik- 
kelt wurden, sind zum Teil noch 
nicht in der Bundesrepublik erhält- 
lich. 


Z80-Karte 

Mit der CP/M-Karte von Precision 
Software erhält der Benutzer Zu- 
gang zur größten Standard-Soft- 
ware-Bibliothek der Welt. Zum Lie- 
ferumfang gehören neben der ei- 
gentlichen Karte, die den Z80-Pro- 
zessor beherbergt, das CP/M- 
Plus-Betriebssystem nebst Doku- 
mentation. Die Hardware kann im 
Rechnergehäuse installiert wer- 
den; sie stört die anderen Be- 
triebsarten nicht. 


Maus und Joystick in einem 

Kraft Systems versucht mit dem 
Quickstick IIc die Vorteile der Maus 
und des Joysticks zu vereinen: Mit 
einem Schieberegler kann zwi- 
schen beiden Betriebsarten ge- 


Peeker 1/86 


schaltet werden. Im Joystick-Mo- 
dus kann man darüber hinaus wäh- 
ien, ob der Steuerknüppel nach 
Loslassen von selbst in die Mittel- 
stellung zurückkehren soll (Selbst- 
zentrierung) oder ob er an der letz- 
ten Position verbleiben soll. 


Drucker-Interface 

Hotlink von Orange Micro verwan- 
delt serielle in parallele Datenfor- 
mate und ermöglicht so den An- 
schluß der meisten Drucker. Da 
die Chips auf dem Interface in 
CMOS-Technik ausgeführt sind, 
wird keine externe Spannungsver- 
sorgung benötigt. Ein Text/Gra- 
phics-Switch stellt die Kompatibili- 
tät mit den verschiedenen Druk- 
ker-Drivern sicher. Im Prinzip die- 
selbe Funktion wie Hotlink hat 
auch der Grappler C, allerdings ist 
er, im Unterschied zu ersterem, 
mit umfangreicher Firmware zur 
Ausgabe und Aufbereitung von 
Grafiken versehen: So lassen sich 
Hires-Bilder invers, gedreht oder 
in doppelter Größe ausdrucken. 


TESTbERICHTE 4 


wie man den „Correspondent“ 
modifizieren kann. 


The Write Choice ist auf allen Ap- 
ple-Il-Typen (Il+/e/c) lauffähig. Da 
der Ausbau des Computers unter- 
schiedlich sein kann, wird auf der 
Diskette ein Programm mitgelie- 
fert, mit dem man The Write Choi- 
ce „personalisieren“ kann. 

Auf der Diskette befindet sich eine 
modifizierte Version des „Diversi- 
DOS“. Dies macht sich besonders 
durch das erfreulich schnelle La- 
den und Speichern der Program- 
me und der Binärfiles bemerkbar. 
In dem Anhang des Handbuchs 


werden die Möglichkeiten und 


Merkmale dieses schnellen DOS 
erklärt. 


Fazit 


Man erhält für etwa 180,- DM ein 
Textverarbeitungssystem, das für 
kleine bis mittlere Anwendungen 
kaum Wünsche offen läßt. Das 152 
Seiten starke Handbuch erklärt gut 
verständlich die Benutzung der 
verschiedenen Programme. Eine 
mitgelieferte Referenz-Karte bietet 
einen schnellen Überblick über die 
zahlreichen Befehle. Die Program- 
me werden auf einer beidseitig be- 
spielten kopierbaren Diskette ge- 
liefert und laufen unter DOS 3.3 


Druckerpuffer 

U-Print AP64 P hat einen 64K-fas- 
senden, internen Speicher zur Puf- 
ferung von zur Druckausgabe an- 
stehenden Daten. Mit einem Wähl- 
schalter kann die gewünschte Ko- 
pienanzahl eingestellt werden, ein 
zweiter Schalter dient der Spei- 
cherlöschung. Das Gerät ist mit ei- 
nem Centronics-Interface ausge- 
stattet. Unter der Bezeichnung U- 
Print AP16 ist auch ein kleinerer 
Typ mit 16K-Speicher erhältlich. 
Beide Geräte werden von Digital 
Devices hergestellt. 


Noch ein Interface 

Mit ApriCord IIc von Apricorn kann 
man centronics-kompatible Druk- 
ker an den Apple Ilc anschließen. 
Zur Spannungsversorgung der in 
einem Kunststoff-Spritzguß-Ge- 
häuse untergebrachten Elektronik 
ist kein eigenes Netzteil erforder- 
lich. 


Reisekoffer 
Mit dem aus Polyethylen gefertig- 
ten und an den Seiten mit Alu- 


bzw. Diversi-DOS. Verblüffend ist, 
daß alle Programme in BASIC ge- 
schrieben sind. Verschiedene zeit- 
intensive Routinen liegen jedoch 
als Maschinenunterprogramme 
vor. Zusätzlich enthält die Diskette 
noch einige Beispieltexte. 


Die Ausführungsart von verschie- 
denen Befehlen ist gewöhnungs- 
bedürftig. So wird das Einfügen für 
meine Begriffe etwas umständlich 
gehandhabt. Man muß erst für die 
gewünschte Anzahl von Zeilen 
Platz schaffen (Ctrl-I), kann dann 
Text eingeben und muß zum 
Schluß ggf. die beiden Textenden 
zusammenfügen (Ctrl-R). Der Ge- 
wöhnung bedarf auch das automa- 
tische Einfügen von zwei Leerzei- 
chen im Anschluß an das Satzende 
nach dem Formatierbefehl (Ctri-R). 
Die Zeit für das Löschen einzelner 
Zeichen wird etwas lang, da gleich- 
zeitig alle Zeilen des Absatzes neu 
formatiert werden. Nach dem Lö- 
schen ganzer Wörter entstehen 
Lücken, die erst nach der Neufor- 
matierung geschloßen werden. 
Nach einiger Zeit Arbeit mit dem 
„Correspondent“ komme ich je- 
doch zu der Ansicht, daß ich die- 
ses Programm trotz der genannten 
Einschränkungen in Zukunft häufig 
benutzen werde. 


Profilen verstärkten Koffer von Fi- 
berbilt ist ein sicherer Transport 
des Apple IIc möglich. Neben dem 
eigentlichen Rechner finden auch 
der Monitor und ein zweites Lauf- 
werk Platz. Auch für Modem und 
Maus sind in dem Schaumstoffein- 
satz Aussparungen vorhanden. 


Paralleles Drucker-Interface 

Mit der Serial Box von PBl lassen 
sich die Drucker von Epson, Oki- 
data und C.lton an den Apple IlIc 
anschließen. Alle zur Verbindung 
von Drucker und Computer benö- 
tigten Kabel werden mitgeliefert. 


Transportkoffer 

Der Transportkoffer von World Wi- 
de Case soll den Apple Ilc bei 
Transport und auf Reisen schüt- 
zen. Jeder Koffer ist innen ausge- 
schäumt und mit einem Schloß 
und Außentaschen versehen. 


Buchhaltung 


Das Buchhaltungsprogramm Rags 
to Riches von Chang Labs gibt es 


67 





jetzt auch für den Apple Ilc. Es 
setzt sich aus den vier Modulen 
Hauptbuch, Außenstände, Zahlun- 
gen und Umsatz zusammen. Das 
Programm benötigt 128K und nutzt 
die Technik des Screen-Splitting. 


Slimline-Laufwerk 

Ad-3C ist ein 5,25-Zoll-Slimline- 
Laufwerk, das direkt an den Apple 
Ic angeschlossen werden kann. 
Es wird von American Mitac herge- 
stellt und ist in der Farbgebung 
dem Rechner angepaßt. 


Adapter 

Mit Hilfe des AppleDaptor von Mi- 
cro-Design kann man alle Disk 
Drives, die sich am Aplle Il, II+ 
oder Ile betreiben lassen, auch an 
den Apple Ilc anschließen. 


5,25-Zoll-Laufwerk 


Als zweites Laufwerk angeschlos- 
sen werden kann der Micro Drive 


Ampersoft 


von Titan Data Systems. Er ist in 
Slimline-Technologie ausgeführt 
und soll kürzere Zugriffszeiten ha- 
ben als die Original-Apple-Lauf- 
werke. Alle zum Anschluß benötig- 
ten Kabel sind Teil des Lieferum- 
fangs. 


Interface für Epson-Drucker 
Unter Benutzung der Universal 
Card von Hanzon kann man die 
beiden Druckertypen Epson RX 
und Epson FX an den Ilc anschlie- 
Ben. Das Interface ändert die für 
den Imagewriter ausgelegten Kon- 
trollcodes dergestalt, das sie auch 
von den Epson-Druckern „Vver- 
standen“ werden. 


Grafikpaket 

Dazzle Draw von Broderbund Soft- 
ware ist ein Programmpaket zur 
Grafikerstellung. Benötigt werden 
128K-Speicher und die Double Hi- 


Eine Ampersand-Utility-Sammlung 


Kurzbericht von 
Franz-Josef Hüskens 


Ampersoft ist eine Utility-Samm- 
lung, die von dem holländischen 
Statistik-Professor und Apple- 
Kenner C. Bongers erstellt wurde 
und über die Software-Abteilung 
der amerikanischen Zeitschrift 
„Nibble“ vertrieben wird. Ein Teil 
der Utilities ist in der Nibble (z.B. 
die Sortierroutine) bzw. in „Call 
A.P.P.L.E.“ (z.B. der DOS-Mover) 
veröffentlicht worden. 

Ampersoft liegt einschließlich des 
gemovten DOS 3.3 komplett in der 
Bank 1 und 2 der Language-Card. 
Mit Ausnahme der Matrizenrech- 
nung sind alle anderen Routinen 
auch durch entsprechende 
Peeker-Beiträge behandelt wor- 
den, auf die gesondert hingewie- 
sen wird. 


MicroSPARC Inc. Apple Iiiie 


AMPERSOFT 


UNILU RouUINeS LIDRANFU 


“Major Speed Enhancements Für 
TBREWINADPDIERRI FINN N 





68 


DOS-Mover 

Erfreulich ist, daß Ampersoft nicht 
nur Applesoft-BASIC erweitert, 
sondern zusätzlich das DOS 3.3 in 
die Language-Card schiebt und 
damit in den unteren 48K ca. 10000 
Bytes mehr Platz schafft. Die- 
ses verschobene DOS unterschei- 
det sich jedoch von dem normalen 
DOS 3.3. So gibt es kein INIT- 
Kommando mehr; man braucht al- 
so weiterhin das Standard-DOS, 
um Disketten initialisieren zu kön- 
nen. Für verschiedene Programme 
(COPYA, FID, MUFFIN, usw.) be- 
finden sich auf der Diskette zusätz- 
liche Routinen, die das jeweilige 
Programm an das veränderte DOS 
anpassen. 

(Vgl. „DOS-Mover“ in Peeker 2/ 
86.) 


CATALOG-Befehl 

Nach einem CATALOG erhält je- 
der File auf der Diskette ein zu- 
sätzliches Zeichen wie -, =, / usw. 
als Abkürzung. Damit kann auf den 
gewünschten File zugegriffen wer- 
den, ohne den vollständigen Na- 
men eingeben zu müssen. 


Print-Using 

Mit Ampersoft erhält Applesoft- 
BASIC ein schnelles Print-Using, 
das keine Wünsche mehr offen 
läßt. Man kann nun mit Hilfe von 
Spezial-Symbolen innerhalb einer 
Formatierungsmaske Zahlenkolon- 
nen oder auch andere Informatio- 
nen beliebig formatiert ausgeben. 
Die Ausgabe ist nicht nur über 
Bildschirm und Drucker, sondern 


res-Grafik. Die Eingabe kann mit- 
tels Apple Mouse, Koala Pad, Gra- 
fik-Tablett oder Joystick erfolgen. 
(s. Peeker 9/85, S. 61.) 


Synthesizer 

Mockingboard von Sweet Micro 
Systems ist ein Synthesizer, der 
sechs Musikstimmen, Halleffekte 
und Sprache erzeugen kann. Zur 
Ausgabe der Toneffekte hat das in 
einem separaten Gehäuse unter- 
gebrachte Gerät Stereolautspre- 
cher. 


Kontrollsystem 

Mit Smartnome von CyberlLynx 
kann man sämtliche elektrischen 
Verbraucher zentral mit dem Apple 
IIc steuern und überwachen. Der 
Anschluß der Hardware erfolgt di- 
rekt an die serielle Schnittstelle 
des Rechners. 


auch auf die Diskette möglich. 
(Vgl. „Print-Using“ in Peeker 11/ 
85.) 


Matrizenbefehle 

Die sehr leistungsfähigen Matri- 
zenbefehle werden Gegenstand 
eines gesonderten Artikels im 
Peeker sein („Matrizenrechnung 
für Betriebswirte“, voraussichtlich 
in Peeker 3/85). 


Sortierroutine 

Mit einer Sortierroutine können 
ein- und zweidimensionale Felder 
schnell in aufsteigender Folge sor- 
tiert werden. Dabei spielt es keine 
Rolle, ob es sich um Zahlen oder 
Strings handelt. Für mehrere, 
durch Indizierung miteinander ver- 
bundenen Feldern kann der Index 
entsprechend mitsortiert werden. 
(Vgl. „Quicksort“ in Peeker 1/86.) 


BSAVE/BLOAD von Arrays 
Zahlenfelder können mit Amper- 
soft als Binärdateien auf Diskette 
gespeichert werden. Dies bietet 
gegenüber der Ablage als Textfiles 
den Vorteil, daß die Zugriffszeit 
verkürzt und der auf der Diskette 
benötigte Speicherplatz verringert 
wird. 

(Vgl. „ProDOS für Aufsteiger“, Bd. 
2, S. 87.) 


Löschen von Arrays 

Eine weitere Utility erlaubt das se- 
lektive Löschen von bereits dimen- 
sionierten Feldern. Damit kann in 
Applesoft-Programmen der vor- 


Lichtgriffel 

Der Gibson Light Pen von Koala 
Technologies wird durch ein Kabel 
mit dem Rechner verbunden. Zum 
Lieferumfang gehören vier Pro- 
gramme, die die Möglichkeiten 
dieses Device ausschöpfen. Die 
Programme heißen Pen Painter, 
Pen Designer, Pen Animator und 
Pen Musician. 


Spracherzeugung 

Mit dem Cricket-Synthesizer von 
Street Electronics kann man so- 
wohl menschlich klingende Stim- 
men (männliche und weibliche) als 
auch „Roboterstimmen“ erzeu- 
gen. Hierzu hat das mit dem TI 
5220 Sprachchip ausgestattete 
Gerät eigene Lautsprecher. Des 
weiteren gibt es sechs Musikkanä- 
le, eine eingebaute Uhr und einen 


Kopfhöreranschluß. P 


handene Speicherplatz effektiver 
ausgenutzt werden. 

(Vgl. „Wie man Arrays löscht“ in 
Peeker 2/84.) 


Garbage-Collection 

Die sehr langsame Garbage-Col- 
lection des Applesoft-Interpreters 
wird mit Ampersoft durch eine sehr 
schnelle ersetzt. 

(Vgl. „Müllabfuhr wie ein Blitz“ in 
Peeker 1/85.) 


Alle Routinen können aus Ap- 
plesoft-Programmen heraus mit 
einfachen &-Befehlen aufgerufen 
werden. Aus diesem Grunde funk- 
tionieren die Utilities nicht bei com- 
pilierten Applesoft-Programmen. 


Ampersoft wird auf einer kopierba- 
ren Diskette geliefert. Im zugehöri- 
gen Handbuch wird die Benutzung 
der Utility-Sammlung anhand von 
Beispielen eingehend beschrieben 
und erklärt. Die einzelnen Utilities 
erweitern das etwas karge Ap- 
plesoft-BASIC zwar um einige 
wichtige Befehle, jedoch ist der 
Preis von etwa 200,- DM für meine 
Begriffe überhöht. Es gibt Pro- 
gramme, die gleiches oder ähnli- 
ches leisten, aber erheblich preis- 
werter sind. Der Vorteil liegt in der 
Bündelung, falls man alle Amper- 
sand-Routinen gleichzeitig benö- 
tigt, weil man sich sonst einzelne 
Routinen (aus dem Peeker usw.) 
erst zusammenstellen müßte. 


4 


Peeker 1/86 








Buchbesprechungen 


Was ist wo im Apple 

1985, 496 S., zahlr. Tabellen und 
Abb., kart. 

von Wiliam F. Luebbert 
Sybex-Verlag, Düsseldorf 

Dieses Buch ist eine gelungene 
Übersetzung des schon fast legen- 
dären „What’s Where in the Ap- 
ple“, das in den Anfängen des Ap- 
ple eine der meistzitierten Quellen 
war und nun auch für den Ile auf 
den neusten Stand gebracht 
wurde. 

Es bietet sowohl für Assembler- 
als auch für gehobene Applesoft- 
Programmierer eine Fülle von Tips 
und Informationen, von der Bele- 
gung der Zero-Page über die Or- 
ganisation des Bildschirms bis hin 
zur Beschreibung von DOS, Ap- 
plesoft-Interpreter und Monitor. 
Der numerische und alphabetische 
Atlas (über 140 Seiten) faßt alle 
Speicherstellen und Routinen zu- 
sammen und beschreibt kurz de- 
ren Anwendung. Die Fülle an In- 
formationen über DOS, beide BA- 
SIC-Interpreter und II+/lle-Moni- 
tor ermöglicht eine effiziente Aus- 
nutzung des Apple, wobei die hier 
angegebenen Label-Namen quasi 
zum Standard wurden. 

Das Buch bietet selbst dem erfah- 
renen Apple-Programmierer noch 
neue Möglichkeiten und kann auch 
später im täglichen Gebrauch als 


nützliches Nachschlagewerk 
dienen. 
Inhalt 
Systemspezifische Programmie- 


rung — PEEK, POKE und CALL -— 
Apple-Architektur — Adressierung 
beim 6502 — Maschinenprogram- 
me in BASIC-Umgebung — Die 
Speicherorganisation — Monitor- 
und DOS-Vektoren — Bildschirm- 
speicher — Benutzerspeicher — 
Das Diskettenbetriebssystem DOS 
—- Der E/A-Bereich — Der Ap- 
plesoft-BASIC-Interpreter — Der 
Monitor-Bereich — Atlas 


Apple-Assembler lernen 

Bd. 1, Einführung in die Assem- 
bler-Programmierung des 6502/ 
65002 

von Jürgen Kehrel 

1985, 234 S., zahlr. Abb., kart., DM 
38,- 

Hüthig Verlag, Heidelberg 

Dieses Buch bietet in 35 Lektionen 
einen bequemen Einstieg in die 
Assembler-Programmierung auf 
dem Apple. Ausgehend von Ap- 
plesoft-BASIC werden kleine Ma- 
schinenprogramme entwickelt, 
wobei besonderer Wert auf eine 
didaktische Einführung in die Pro- 
grammierung mit einem Assem- 
bler gelegt wurde. 


Peeker 1/86 


In jedem Fall empfehlenswert ist 
der Kauf der Begleitdiskette (Preis: 
DM 44,-), die neben allen in dem 
Buch gezeigten Programmen auch 
einen „ausgewachsenen“ Assem- 
bler mit Editor bietet, der trotz der 
fehlenden Makro-Eigenschaft 
durchaus mit professionellen As- 
semblern konkurrieren kann und 
weit über die Anfänge der Pro- 
grammierung in Maschinenspra- 
che alle Wünsche abdeckt. Ein be- 
sonders für Anfänger fast unaus- 
weichliches Hilfsmittel ist der 
ebenfalls auf der Begleitdiskette 
enthaltene Debugger IDUS, der es 
ermöglicht, die selbstgeschriebe- 
nen Programme schrittweise zu 
verfolgen und die Änderung von 
Speicherstellen, Registern und 
Flaggen zu beobachten. 

Vor der Besprechung der Befehle 
erfolgt eine leichtverständliche 
Einführung in die Welt der Bits und 
Bytes. Bei den Programmen wurde 
versucht, Probleme der täglichen 
Assembler-Praxis aufzugreifen, so 
daß nicht unnütze Probleme be- 
sprochen werden, sondern schon 
einmal eine verständliche aber 
professionelle Routine angeboten 
wird. 

Die für Anfänger zunächst un- 
durchschaubaren Adressierungs- 
arten des 6502 werden nicht ne- 
benbei beschrieben, sondern am 
Ende der Einführung mit instrukti- 
ven Abbildungen veranschaulicht, 
ein Weg, den jeder Assembler- 
Kurs beschreiten sollte. Eine um- 
fangreiche Zusammenfassung des 
kompletten Befehlssatzes mit Bei- 
spielen für den täglichen Gebrauch 
und verschiedene Tabellen runden 
den ersten Band ab. 

Inhalt 

Assembler-Kurs in 35 Lektionen — 
Der 6502/65C02 Befehlssatz — 
Der Assembler ASSESSOR — Der 
Debugger und Simulator IDUS — 
Anhang 


ProDOS-Analyse 

Versionen 1.0.1, 1.0.2, 1.1.1 

von Arne Schäpers 

1985, 470 S., kart., DM 68,- 
Hüthig Verlag, Heidelberg 

Mit der ProDOS-Analyse erhält der 
Leser eine umfassende Darstel- 
lung der kompletten ProDOS-In- 
terna, ohne das BASIC.SYSTEM. 
Da sowohl die Versionen 1.0.1 als 
auch die geänderten Versionen 
1.0.2 und 1.1.1 beschrieben wer- 
den, kann der mit Assembler ver- 
traute Anwender (und nur für diese 
Gruppe ist dieses Buch geeignet) 
sein Betriebssystem modifizieren 
und patchen oder auch nur ergrün- 


den. Die kommentierten Assem- 
blerlistings aller Teile (MLI mit 
RWTB, Boot-Programm, RAM- 
Disk etc.) geben einen tiefgreifen- 
den Einblick in die Arbeitsweise 
des Betriebssystems. Dabei wird 
jeweils vorher die genaue Funktion 
der einzelnen Komponenten be- 
schrieben, so daß nach der Lektü- 
re dieses Buches kaum noch Fra- 
gen zu dem Betriebssystem offen 
bleiben dürften. 

Mit der ProDOS-Analyse hat der 
Autor selbst das Technical Refe- 
rence Manual der Firma Apple 
übertroffen und die wohl umfang- 
reichste theoretische Darstellung 
eines Betriebssystems geschaf- 
fen, die je auf dem freien Markt 
erhältlich war. 

Das MLI — Dateistrukturen unter 
ProDOS — Programmiertricks im 
MLI -— BOOT und REBOOT von 
ProDOS — Die Verarbeitung von 
NMI, RESET und IRQ — SET TIME 
für die Thunderclock — Die System 
Global Page - Die RWTB der DISK 
II - Die Organisation einer Diskette 
— Hardware Details — Die RAMDisk 
— Updates von ProDOS — Anhänge 


Bewegte Apple-Grafik 

DOS Toolkit-Erweiterungen 

von Arne Schäpers 

1985, 308 S., kart., DM 58,- 
Hüthig Verlag, Heidelberg 

Die DOS Toolkit-Diskette enthält 
neben dem Assembler auch ein 
interessantes Programm zur Dar- 
stellung von Objekten auf dem 
HGR-Bildschirm des Apple. Dieser 
Hires Character Generator ist Ge- 
genstand dieses Buches, das den 
fortgeschrittenen Applesoft-Pro- 
grammierer mit Assemblerkennt- 
nissen in die Welt der bewegten 
Grafik einführt. Im ersten Teil des 
Buches wird zunächst der HRCG 
analysiert und dessen Möglichkei- 
ten aufgezeigt. Daran schließt sich 
ein kommentiertes Assemblerli- 
sting an. 

Im zweiten Teil wird ein professio- 
nelles Arkade-Spiel entwickelt, bei 
dem der Leser unter anderem 
lernt, wie simultane Bewegungen 
mehrerer Objekte gleichzeitig rea- 
lisierbar sind. Dabei wird auch auf 
die Steuerung mit Joysticks und 
Paddles eingegangen. Dieser Blick 
hinter die Kulissen der Program- 
mierung von Computerspielen bie- 
tet die Möglichkeit, eigene Ideen 
umzusetzen und Spiele zu pro- 
grammieren, die in nichts den pro- 
fessionellen Angeboten nachste- 
hen müssen. 

Inhalt 

Der HRCG - Line-Skewing — 
Transparente Overlays — Arkade- 
Algorithmen — Asymmetrische Fi- 
guren und optische Mittelpunkte — 
Kontrollprogramm — Kollisionen — 
Ausblicke 


49 NEUE bücher ey 


Applesoft BASIC 

Tips und Tricks 

von Frank Bühler 

1985, 244 S., kart., DM 38.- 
Hüthig Verlag, Heidelberg 

Dieses Buch ist für den Anfänger 
und Fortgeschrittenen gleicherma- 
Ben nutzbar. Neben einer Einfüh- 
rung in die Programmiersprache 
BASIC, die für den Einstieg aus 
einer anderen Sprache ausrei- 
chend sein dürfte, werden alle Ap- 
plesoft-Befehle mit entsprechen- 
den Beispielen aufgeführt. 
Darüber hinaus bietet das Buch 
einige Programmbeispiele mit z.T. 
kleineren Assembler-Routinen 
(deren Eingabe in den Rechner lei- 
der nicht erklärt wird), die dann in 
eigene Programme aufgenommen 
werden können. Am Ende folgen 
einige Tips zur Entwicklung von ef- 
fizienten Applesoft-Programmen. 
Im Anhang findet der Leser noch 
einmal Tabellen mit Fehlermeldun- 
gen, 6502-Befehlssatz und nützli- 
che Adressen. 

Inhalt 

Applesoft-Basic im Vergleich — 
Grundelemente von Basic — Ap- 
plesoft-Befehlssatz — Rechenope- 
rationen — Anwendungs- und Pro- 
grammbeispiele — Programment- 
wicklung/Hinweise — Anhang 


dBase Il 

Bd. 2: Programmierung 

von W. Eggerichs 

1985, 191 S., zahlr. Abb., kart., DM 
38,90 

Hüthig Verlag, Heidelberg 

Das Buch knüpft unmittelbar an 
den Band 1 „Einführung“ an. Mit 
seiner kurz-sachlichen Formulie- 
rung hebt es sich wohltuend von 
zahlreichen dBase-Büchern ab, 
die weitschweifend wenig Informa- 
tion pro Seite bieten. 

An den kleinen Beispielen werden 
die grundlegenden Befehle zum 
Programmieren in dBase erklärt. 
Zur grafischen Darstellung wird 
das Struktogramm gewählt (auf 
den wesentlich unübersichtliche- 
ren PAP verzichtet der Autor zu 
Recht). Abschließend wird eine 
vollständige Anwendung zur Ver- 
waltung von Kundenstammdaten 
wiedergegeben, die der Leser 
leicht seinen eigenen Wünschen 
anpassen kann. 


69 


70 


In Vorbereitung 


Aufsätze 


Dos-Mover 

Erhöhung der Speicher- 
kapazität um 30% 
(DOS 3.3) 


Binäres Rechnen mit 

Papier und Bleistift 

Teil 1: Addition und Subtraktion 
(Grundlagen) 


Matrizenrechnung in der 
betriebswirtschaftlichen Praxis 
(Praxis) 


Der IEC-Bus 
(Hardware) 


Serielle Schnittstellen beim 
Apple IIc 
(Hardware) 


MAKESUB 

Erstellung zusammenhängen- 
der Subdirectories 

(ProDOS) 


Befehlserweiterung durch 
CHRGET-Manipulation 
(Applesoft) 


Bildschirmmasken in der 
Language-Card 

(Assembler) 
Dreidimensionale Funktions- 


darstellung 
(Grafik) 


Dreiecksberechnung 
(UCSD) 


Readin von Integer-Zahlen 
(UCSD) 


Test- und Erfahrungs- 
berichte 


CP/M-3.0-Karte für Apple Ilc 
(Semjan) 


Premium-Softcard 
Speicherverwaltung unter CP/M 
(Microsoft) 


FSS 280 
Diskettenlaufwerk 
(erphi electronic) 


Prometric 
65C02C- und Z80B-Rechner 
(Electronic Special Service) 


Microbuffer II 
Druckerpuffer-Karte 
(Practical Peripherals) 


ML-192-Drucker 
(Okidata) 


SG-15-Drucker 
(Star) 


Mockingboard 
Musik- und Sprachkarte 
(Sweet Micro Systems) 


Multi-Disk-Catalog Ill 
Diskettenverwaltung 
(Sensible Software) 


DCODE 
Applesoft-Hilfsprogramme 
(Beagle Brothers) 


Apple- und Peeker-Händler 


Den „Peeker“ gibt es bei folgenden Apple-Händlern: 


Beso GmbH, Oswaldstr. 5, 4700 Hamm 4 

Böhmer Electronic, Wilhelm-Zopf-Str. 9, 7080 Aalen 
Büro Plan Klaus Bayerl, Bochumer Str. 22, 4270 Dorsten 
City Computer, Dönhoffstr. 23, 5090 Leverkusen 
Computerland, Am Wall 137, 2800 Bremen 1 
Delta-Electronic, Gugelmattstr. 31, Ch-8967 Widen 

DMS Büroorganisation GmbH, Schwimmbadstr. 36, 


6301 Heuchelheim 


Günther Heinicke GmbH, Postfach 80 04 26, 2050 Hamburg 80 
Horten Warenhaus, 1 N 7, 2a, 6800 Mannheim 

Norbert Hunstig, Nottulner Landweg 81, 4400 Münster 

Karstadt AG, Kampstr. 1, 4600 Dortmund 1 

Kaut-Bullinger & Co. GmbH, Rosenstr. 8, 8000 München 8 
Josef Kraus, Darmstädter Str. 26, 6148 Heppenheim 
Microland-Computer GmbH, Bäringer Str. 31, 3380 Goslar 
Mittelrheinisches Rechenzentrum GmbH, Postf. 128, 5160 Düren 
Novocomp Datensysteme GmbH, Walramsneustr. 7 u. 9, 5500 Trier 
Orgasoft GmbH, Graneggstr. 43, 7732 Niedereschach 
Pandassoft, Uhlandstr. 195, 1000 Berlin 12 

R+R Electronic, Breslauerstr. 29, 6900 Heidelberg 1 

Schöpp GmbH, Bahnstr. 79, 6140 Bensheim 
Staehlin-Büroorganisation, Klostersteige 12-14, 


8960 Kempten / Allgäu 


Wagner Datentechnik, Hochstr. 1, 7990 Friedrichshafen 
Würth Bürobedarf + Organisation GmbH, Am Rupertsberg 16, 


6530 Bingen 1 


Sammeldisk #13 


QUICK.RANDOM (Heft 1/86, S. 6ff.) 
QUICK.SPEZIAL 

QUICK.TASC 

QUICK.DISK 


QUICKSORT.DEMO (Heft 1/86, S. 16ff.) 
T.QUICKSORT 
QUICKSORT 


VOK.TRAINER (Heft 1/86, S. 20ff.) 
VOK.COPY 

VOK.PACK 

VOK.BCOPY 

GWS.INFO 

GWS.VOK 


AGE.DEMO (Heft 1/86, S. 30ff.) 
T.AGE 
AGE 


GRAFIK.DEMOS.2 (Heft 1/86, S. 61ff.) 
Achtung! 


Wegen der riesigen deutsch-englischen Übungsdatei 
GWS.VOK zum Vokabeltrainer müssen die nachfolgenden 
Programme aus Heft 1/86 auf die Sammeldisk #14 über- 
nommen werden, die im übrigen die Programme aus Heft 


2/86 enthalten wird. 


T.PROTODOS (Heft 1/86, S. 36ff.) 
PROTODOS 


DESIGNER.TEXT (Heft 1/86, S. 43ff.) 
READPAS.PAS (Heft 1/86, S. 48ff.) 


Inserentenverzeichnis Peeker 1/86 


aaa electronic gmbh, Freiburg 

ACS, Detmold 

AFC Computer GmbH, Köln 

Ampersand (vorm. Pandabooks), Berlin . 
ccp-datentechnik, Hamburg . 
Ingenieurbüro Fricke, Berlin . 

GEPARD Computer GmbH, Oldenburg . 
HIB Computerladen, Nürnberg . 

N. Hunstig, Münster 

Interkom electronic, Isernhagen 

Intus, Waldshut-Tiengen . 

Jeschke, Kelkheim . 

U. Mohwinkel Electronic, Leverkusen 
Pandasoft, Berlin 

M. Semjan Computer Systeme, Frankfurt 
Tewi-Verlag, München 


Ueding electronics, Menden 


35 
15 
23 
41 
23 
13 
23 
14 
15 
18 
23 
23 
13 
93 





Peeker 1/86 


LE 
















„Apple Assembler” wendet sich an alle, 
die bereits Anfängerkenntnisse der 
6502-Programmierung haben und 
nunmehr ein Nachschlagewerk für 
ihren Apple II Plus /lle/llc suchen, in 
dem alle wichtigen ROM-Routinen 
sowie eine Vielzahl sonstiger Hilfspro- 
gramme in einer systematischen Form 
zusammengestellt werden. Insgesamt 
umfaßt dieses Buch über 40 Utilities, 
darunter mehrere völlig neuartige Pro- 
gramme wie Double-Lores, Double- 
Hires, Screen-Format u. a. 


Der erste Teil enthält ein Repetitorium 
der wichtigsten Befehle, Adressie- 
rungsarten und sonstigen Besonderhei- 
ten des 6502 sowie Angaben zu den 
apple-spezifischen Zahlenformaten 
(Integer- und Fließkommazahlen). 

Im zweiten Teil werden neben einer 
Kurzwiederholung der Monitor-Befehle 
alle Routinen und Adressen des Moni- 
tors zusammengestellt, die für Assem- 
blerprogrammierer von Nutzen sein 
können. Darüber hinaus findet der 
Leser Unterroutinen für Vorwärts- und 
Rückwärts-Moven, hexadezimale Addi- 
tion /Subtraktion /Multiplikation /Divi- 
sion, Binär-, Hex-und ASCII- 


Hüthig-FACHBUCH-TIP 


PS 
und Tricks 


Mit ausführlichen x 
Programmbeispielen 


Ulrich Stiehl 











Bis 


Umwandlung, Dumpen /Disassemblie- 
ren, Aufwärts-Scrollen, Reset u. a. 

Der dritte Teil befaßt sich mit der Spei- 
cherverwaltung der Language-Card 
und der Il e-64K-Karte und enthält Test- 
und Move-Programme zum Verschie- 
ben von Daten in die und aus der 
Language Card sowie der 64K-Karte, 
wobei besonders ausführlich auf die 
Softswitches eingegangen wird. 


Der vierte Teil ist dem Applesoft-ROM 
gewidmet und beschreibt die interne 
Struktur von Applesoft-Programmen, 
die Methoden der Parameterübergabe 
mittels CALL, USR, &, PEEK und POKE 
und listet dann eine große Anzahl nütz- 


Apple Assembler 
- Tips und Tricks - 


von U. Stiehl 


232 S., 40 Programm-Listings, 
3 Abb., kart., DM 34,— 
ISBN 3-7785-1047-9 


Begleitdiskette zum Buch DM 28,— 
ISBN 3-7785-1048-7 


licher Interpreter-Adressen. Bei den se & 
Utility-Programm liegt das Schwerge- 67 Re 
wicht auf Fließkommamathematik ein- DEE 
schließlich Print Using. Pd ? 5° 

Der letzte Teil behandelt den Text- und ® RSS 
Grafikspeicher. Neben einem profes- 9 LERNEN 

sionellen Maskengeneratorprogramm & KR = 


findet der Leser hier auch erstmals 
Routinen zur Double-Lores- und 
Double-Hires-Grafik des Apple Ile. 










In Vorbereitung 


TurtleGraphics-Library-Paket 


*& Listbir Volumes 


ER uyr.. er 


und Apple-Maus in einfacher 
und doppelter Hires-Grafik für 
Pascal 1.1/1.2 auf Apple II+/e/c 
mit Maus oder Joystick. 

2 Disketten mit umfangreichem 
Manual, DM 98,— 
Erscheinungstermin Anfang 1986 










5 Files 208 Ik, TE 
EUTTERDEI TE) TEXT 





> Desktop 
Filename: DESKTOP 






5 
: 
23 
3 
2 
2 
R 
£ 
2 













IMIHNNSICLHDhIL 
m. w) u 


Das Utility-Paket besteht aus vier Modulen, die von Programmierern-benutzt werden können, um 
professionelle grafische Anwendungsprogramme in Pascal zu schreiben. 


Benötigt wird ein Apple Pascal Betriebssystem, entweder die Version 1.1 oder die neue Version 
1.2. Bestehende Programme laufen ohne Einschränkung mit der neuen „TurtleGraphics“, wenn 
diese nicht zu viel Speicherplatz verbraucht haben, da die neue „TurtleGraphics“ umfangreicher 
als die alte ist. 


Im einzelnen bietet das Paket folgende Möglichkeiten: 


— volle Kompatibilität mit der alten „TurtleGraphics“ 

— lauffähig auf Pascal 1.1 und 1.2 

— funktionsfähig mit angeschlossener UltraTerm-Karte 

— alle zeitkritischen Funktionen in reinem Assembler programmiert 

— Benutzung der zweiten Hires-Seite ($4000-$5FFF) möglich 

— für Apple IIc und Apple Ile mit erweiterter 80-Zeichen-Karte Benutzung der doppelten Hires- 
Grafik mit 560 x 192 Punkten bzw. 16 neuen Farben möglich 

— schnelle Prozeduren zum Zeichnen eines Punktes oder einer Linie 

— Linearisierung von Teilen des Hires-Schirms 

— Benutzung mehrerer Zeichensätze gleichzeitig 

— Laden und Speichern von Hires-Bildern mit Ausdruck über Pascal-SUPERDUMP 

— Scrolling des Hires-Schirms oder eines Teils in vier Richtungen 

— drei verschiedene Schriftarten: Fett-, Breit- und Proportionalschrift, beliebig mischbar 
(acht Möglichkeiten) 

— spezielle schnelle Ausgabe von Text 

— Cursor bei Eingabe frei programmierbar 

— Ein-/Ausgabe von INTEGER-, CHAR-, STRING- und REAL-Werten im Grafikmodus 

— Menüzeile wie beim Macintosh (Die nachfolgenden Module benötigen Maus/Joystick) 

— Pull-down-Menüs 

— Laden und Speichern von Fenstern (Windows) 

— Öffnen von Fenstern 

— Aktivieren und Deaktivieren von Fenstern 

— Verschieben und Vergrößern/Verkleinern von Fenstern 

— Scrolling von Fensterinhalten in allen vier Richtungen 

— Umfangreiche Demos als Quelltexte. 


Hüthig Software Service - Postfach 102869 - 6900 Heidelberg